1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.helpers;
26
27 import java.lang.reflect.InvocationTargetException;
28 import java.lang.reflect.Method;
29 import java.util.Queue;
30
31 import org.slf4j.Logger;
32 import org.slf4j.Marker;
33 import org.slf4j.event.EventRecodingLogger;
34 import org.slf4j.event.LoggingEvent;
35 import org.slf4j.event.SubstituteLoggingEvent;
36
37
38
39
40
41
42
43
44
45
46
47 public class SubstituteLogger implements Logger {
48
49 private final String name;
50 private volatile Logger _delegate;
51 private Boolean delegateEventAware;
52 private Method logMethodCache;
53 private EventRecodingLogger eventRecodingLogger;
54 private Queue<SubstituteLoggingEvent> eventQueue;
55
56 private final boolean createdPostInitialization;
57
58 public SubstituteLogger(String name, Queue<SubstituteLoggingEvent> eventQueue, boolean createdPostInitialization) {
59 this.name = name;
60 this.eventQueue = eventQueue;
61 this.createdPostInitialization = createdPostInitialization;
62 }
63
64 public String getName() {
65 return name;
66 }
67
68 public boolean isTraceEnabled() {
69 return delegate().isTraceEnabled();
70 }
71
72 public void trace(String msg) {
73 delegate().trace(msg);
74 }
75
76 public void trace(String format, Object arg) {
77 delegate().trace(format, arg);
78 }
79
80 public void trace(String format, Object arg1, Object arg2) {
81 delegate().trace(format, arg1, arg2);
82 }
83
84 public void trace(String format, Object... arguments) {
85 delegate().trace(format, arguments);
86 }
87
88 public void trace(String msg, Throwable t) {
89 delegate().trace(msg, t);
90 }
91
92 public boolean isTraceEnabled(Marker marker) {
93 return delegate().isTraceEnabled(marker);
94 }
95
96 public void trace(Marker marker, String msg) {
97 delegate().trace(marker, msg);
98 }
99
100 public void trace(Marker marker, String format, Object arg) {
101 delegate().trace(marker, format, arg);
102 }
103
104 public void trace(Marker marker, String format, Object arg1, Object arg2) {
105 delegate().trace(marker, format, arg1, arg2);
106 }
107
108 public void trace(Marker marker, String format, Object... arguments) {
109 delegate().trace(marker, format, arguments);
110 }
111
112 public void trace(Marker marker, String msg, Throwable t) {
113 delegate().trace(marker, msg, t);
114 }
115
116 public boolean isDebugEnabled() {
117 return delegate().isDebugEnabled();
118 }
119
120 public void debug(String msg) {
121 delegate().debug(msg);
122 }
123
124 public void debug(String format, Object arg) {
125 delegate().debug(format, arg);
126 }
127
128 public void debug(String format, Object arg1, Object arg2) {
129 delegate().debug(format, arg1, arg2);
130 }
131
132 public void debug(String format, Object... arguments) {
133 delegate().debug(format, arguments);
134 }
135
136 public void debug(String msg, Throwable t) {
137 delegate().debug(msg, t);
138 }
139
140 public boolean isDebugEnabled(Marker marker) {
141 return delegate().isDebugEnabled(marker);
142 }
143
144 public void debug(Marker marker, String msg) {
145 delegate().debug(marker, msg);
146 }
147
148 public void debug(Marker marker, String format, Object arg) {
149 delegate().debug(marker, format, arg);
150 }
151
152 public void debug(Marker marker, String format, Object arg1, Object arg2) {
153 delegate().debug(marker, format, arg1, arg2);
154 }
155
156 public void debug(Marker marker, String format, Object... arguments) {
157 delegate().debug(marker, format, arguments);
158 }
159
160 public void debug(Marker marker, String msg, Throwable t) {
161 delegate().debug(marker, msg, t);
162 }
163
164 public boolean isInfoEnabled() {
165 return delegate().isInfoEnabled();
166 }
167
168 public void info(String msg) {
169 delegate().info(msg);
170 }
171
172 public void info(String format, Object arg) {
173 delegate().info(format, arg);
174 }
175
176 public void info(String format, Object arg1, Object arg2) {
177 delegate().info(format, arg1, arg2);
178 }
179
180 public void info(String format, Object... arguments) {
181 delegate().info(format, arguments);
182 }
183
184 public void info(String msg, Throwable t) {
185 delegate().info(msg, t);
186 }
187
188 public boolean isInfoEnabled(Marker marker) {
189 return delegate().isInfoEnabled(marker);
190 }
191
192 public void info(Marker marker, String msg) {
193 delegate().info(marker, msg);
194 }
195
196 public void info(Marker marker, String format, Object arg) {
197 delegate().info(marker, format, arg);
198 }
199
200 public void info(Marker marker, String format, Object arg1, Object arg2) {
201 delegate().info(marker, format, arg1, arg2);
202 }
203
204 public void info(Marker marker, String format, Object... arguments) {
205 delegate().info(marker, format, arguments);
206 }
207
208 public void info(Marker marker, String msg, Throwable t) {
209 delegate().info(marker, msg, t);
210 }
211
212 public boolean isWarnEnabled() {
213 return delegate().isWarnEnabled();
214 }
215
216 public void warn(String msg) {
217 delegate().warn(msg);
218 }
219
220 public void warn(String format, Object arg) {
221 delegate().warn(format, arg);
222 }
223
224 public void warn(String format, Object arg1, Object arg2) {
225 delegate().warn(format, arg1, arg2);
226 }
227
228 public void warn(String format, Object... arguments) {
229 delegate().warn(format, arguments);
230 }
231
232 public void warn(String msg, Throwable t) {
233 delegate().warn(msg, t);
234 }
235
236 public boolean isWarnEnabled(Marker marker) {
237 return delegate().isWarnEnabled(marker);
238 }
239
240 public void warn(Marker marker, String msg) {
241 delegate().warn(marker, msg);
242 }
243
244 public void warn(Marker marker, String format, Object arg) {
245 delegate().warn(marker, format, arg);
246 }
247
248 public void warn(Marker marker, String format, Object arg1, Object arg2) {
249 delegate().warn(marker, format, arg1, arg2);
250 }
251
252 public void warn(Marker marker, String format, Object... arguments) {
253 delegate().warn(marker, format, arguments);
254 }
255
256 public void warn(Marker marker, String msg, Throwable t) {
257 delegate().warn(marker, msg, t);
258 }
259
260 public boolean isErrorEnabled() {
261 return delegate().isErrorEnabled();
262 }
263
264 public void error(String msg) {
265 delegate().error(msg);
266 }
267
268 public void error(String format, Object arg) {
269 delegate().error(format, arg);
270 }
271
272 public void error(String format, Object arg1, Object arg2) {
273 delegate().error(format, arg1, arg2);
274 }
275
276 public void error(String format, Object... arguments) {
277 delegate().error(format, arguments);
278 }
279
280 public void error(String msg, Throwable t) {
281 delegate().error(msg, t);
282 }
283
284 public boolean isErrorEnabled(Marker marker) {
285 return delegate().isErrorEnabled(marker);
286 }
287
288 public void error(Marker marker, String msg) {
289 delegate().error(marker, msg);
290 }
291
292 public void error(Marker marker, String format, Object arg) {
293 delegate().error(marker, format, arg);
294 }
295
296 public void error(Marker marker, String format, Object arg1, Object arg2) {
297 delegate().error(marker, format, arg1, arg2);
298 }
299
300 public void error(Marker marker, String format, Object... arguments) {
301 delegate().error(marker, format, arguments);
302 }
303
304 public void error(Marker marker, String msg, Throwable t) {
305 delegate().error(marker, msg, t);
306 }
307
308 @Override
309 public boolean equals(Object o) {
310 if (this == o)
311 return true;
312 if (o == null || getClass() != o.getClass())
313 return false;
314
315 SubstituteLogger that = (SubstituteLogger) o;
316
317 if (!name.equals(that.name))
318 return false;
319
320 return true;
321 }
322
323 @Override
324 public int hashCode() {
325 return name.hashCode();
326 }
327
328
329
330
331
332 Logger delegate() {
333 if(_delegate != null) {
334 return _delegate;
335 }
336 if(createdPostInitialization) {
337 return NOPLogger.NOP_LOGGER;
338 } else {
339 return getEventRecordingLogger();
340 }
341 }
342
343 private Logger getEventRecordingLogger() {
344 if (eventRecodingLogger == null) {
345 eventRecodingLogger = new EventRecodingLogger(this, eventQueue);
346 }
347 return eventRecodingLogger;
348 }
349
350
351
352
353
354 public void setDelegate(Logger delegate) {
355 this._delegate = delegate;
356 }
357
358 public boolean isDelegateEventAware() {
359 if (delegateEventAware != null)
360 return delegateEventAware;
361
362 try {
363 logMethodCache = _delegate.getClass().getMethod("log", LoggingEvent.class);
364 delegateEventAware = Boolean.TRUE;
365 } catch (NoSuchMethodException e) {
366 delegateEventAware = Boolean.FALSE;
367 }
368 return delegateEventAware;
369 }
370
371 public void log(LoggingEvent event) {
372 if (isDelegateEventAware()) {
373 try {
374 logMethodCache.invoke(_delegate, event);
375 } catch (IllegalAccessException e) {
376 } catch (IllegalArgumentException e) {
377 } catch (InvocationTargetException e) {
378 }
379 }
380 }
381
382
383 public boolean isDelegateNull() {
384 return _delegate == null;
385 }
386
387 public boolean isDelegateNOP() {
388 return _delegate instanceof NOPLogger;
389 }
390 }