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.impl;
26
27 import static org.slf4j.event.EventConstants.NA_SUBST;
28
29 import java.io.Serializable;
30
31 import org.apache.log4j.Level;
32 import org.apache.log4j.spi.LocationInfo;
33 import org.apache.log4j.spi.ThrowableInformation;
34 import org.slf4j.Logger;
35 import org.slf4j.Marker;
36 import org.slf4j.event.LoggingEvent;
37 import org.slf4j.helpers.FormattingTuple;
38 import org.slf4j.helpers.MarkerIgnoringBase;
39 import org.slf4j.helpers.MessageFormatter;
40 import org.slf4j.spi.LocationAwareLogger;
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public final class Log4jLoggerAdapter extends MarkerIgnoringBase implements LocationAwareLogger, Serializable {
61
62 private static final long serialVersionUID = 6182834493563598289L;
63
64 final transient org.apache.log4j.Logger logger;
65
66
67
68
69
70 final static String FQCN = Log4jLoggerAdapter.class.getName();
71
72
73
74 final boolean traceCapable;
75
76
77
78
79 Log4jLoggerAdapter(org.apache.log4j.Logger logger) {
80 this.logger = logger;
81 this.name = logger.getName();
82 traceCapable = isTraceCapable();
83 }
84
85 private boolean isTraceCapable() {
86 try {
87 logger.isTraceEnabled();
88 return true;
89 } catch (NoSuchMethodError e) {
90 return false;
91 }
92 }
93
94
95
96
97
98
99 public boolean isTraceEnabled() {
100 if (traceCapable) {
101 return logger.isTraceEnabled();
102 } else {
103 return logger.isDebugEnabled();
104 }
105 }
106
107
108
109
110
111
112
113 public void trace(String msg) {
114 logger.log(FQCN, traceCapable ? Level.TRACE : Level.DEBUG, msg, null);
115 }
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 public void trace(String format, Object arg) {
132 if (isTraceEnabled()) {
133 FormattingTuple ft = MessageFormatter.format(format, arg);
134 logger.log(FQCN, traceCapable ? Level.TRACE : Level.DEBUG, ft.getMessage(), ft.getThrowable());
135 }
136 }
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154 public void trace(String format, Object arg1, Object arg2) {
155 if (isTraceEnabled()) {
156 FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
157 logger.log(FQCN, traceCapable ? Level.TRACE : Level.DEBUG, ft.getMessage(), ft.getThrowable());
158 }
159 }
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175 public void trace(String format, Object... arguments) {
176 if (isTraceEnabled()) {
177 FormattingTuple ft = MessageFormatter.arrayFormat(format, arguments);
178 logger.log(FQCN, traceCapable ? Level.TRACE : Level.DEBUG, ft.getMessage(), ft.getThrowable());
179 }
180 }
181
182
183
184
185
186
187
188
189
190 public void trace(String msg, Throwable t) {
191 logger.log(FQCN, traceCapable ? Level.TRACE : Level.DEBUG, msg, t);
192 }
193
194
195
196
197
198
199 public boolean isDebugEnabled() {
200 return logger.isDebugEnabled();
201 }
202
203
204
205
206
207
208
209 public void debug(String msg) {
210 logger.log(FQCN, Level.DEBUG, msg, null);
211 }
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227 public void debug(String format, Object arg) {
228 if (logger.isDebugEnabled()) {
229 FormattingTuple ft = MessageFormatter.format(format, arg);
230 logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
231 }
232 }
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250 public void debug(String format, Object arg1, Object arg2) {
251 if (logger.isDebugEnabled()) {
252 FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
253 logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
254 }
255 }
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270 public void debug(String format, Object... arguments) {
271 if (logger.isDebugEnabled()) {
272 FormattingTuple ft = MessageFormatter.arrayFormat(format, arguments);
273 logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
274 }
275 }
276
277
278
279
280
281
282
283
284
285 public void debug(String msg, Throwable t) {
286 logger.log(FQCN, Level.DEBUG, msg, t);
287 }
288
289
290
291
292
293
294 public boolean isInfoEnabled() {
295 return logger.isInfoEnabled();
296 }
297
298
299
300
301
302
303
304 public void info(String msg) {
305 logger.log(FQCN, Level.INFO, msg, null);
306 }
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321 public void info(String format, Object arg) {
322 if (logger.isInfoEnabled()) {
323 FormattingTuple ft = MessageFormatter.format(format, arg);
324 logger.log(FQCN, Level.INFO, ft.getMessage(), ft.getThrowable());
325 }
326 }
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344 public void info(String format, Object arg1, Object arg2) {
345 if (logger.isInfoEnabled()) {
346 FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
347 logger.log(FQCN, Level.INFO, ft.getMessage(), ft.getThrowable());
348 }
349 }
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365 public void info(String format, Object... argArray) {
366 if (logger.isInfoEnabled()) {
367 FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
368 logger.log(FQCN, Level.INFO, ft.getMessage(), ft.getThrowable());
369 }
370 }
371
372
373
374
375
376
377
378
379
380
381 public void info(String msg, Throwable t) {
382 logger.log(FQCN, Level.INFO, msg, t);
383 }
384
385
386
387
388
389
390 public boolean isWarnEnabled() {
391 return logger.isEnabledFor(Level.WARN);
392 }
393
394
395
396
397
398
399
400 public void warn(String msg) {
401 logger.log(FQCN, Level.WARN, msg, null);
402 }
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418 public void warn(String format, Object arg) {
419 if (logger.isEnabledFor(Level.WARN)) {
420 FormattingTuple ft = MessageFormatter.format(format, arg);
421 logger.log(FQCN, Level.WARN, ft.getMessage(), ft.getThrowable());
422 }
423 }
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441 public void warn(String format, Object arg1, Object arg2) {
442 if (logger.isEnabledFor(Level.WARN)) {
443 FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
444 logger.log(FQCN, Level.WARN, ft.getMessage(), ft.getThrowable());
445 }
446 }
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462 public void warn(String format, Object... argArray) {
463 if (logger.isEnabledFor(Level.WARN)) {
464 FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
465 logger.log(FQCN, Level.WARN, ft.getMessage(), ft.getThrowable());
466 }
467 }
468
469
470
471
472
473
474
475
476
477
478 public void warn(String msg, Throwable t) {
479 logger.log(FQCN, Level.WARN, msg, t);
480 }
481
482
483
484
485
486
487 public boolean isErrorEnabled() {
488 return logger.isEnabledFor(Level.ERROR);
489 }
490
491
492
493
494
495
496
497 public void error(String msg) {
498 logger.log(FQCN, Level.ERROR, msg, null);
499 }
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515 public void error(String format, Object arg) {
516 if (logger.isEnabledFor(Level.ERROR)) {
517 FormattingTuple ft = MessageFormatter.format(format, arg);
518 logger.log(FQCN, Level.ERROR, ft.getMessage(), ft.getThrowable());
519 }
520 }
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538 public void error(String format, Object arg1, Object arg2) {
539 if (logger.isEnabledFor(Level.ERROR)) {
540 FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
541 logger.log(FQCN, Level.ERROR, ft.getMessage(), ft.getThrowable());
542 }
543 }
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559 public void error(String format, Object... argArray) {
560 if (logger.isEnabledFor(Level.ERROR)) {
561 FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
562 logger.log(FQCN, Level.ERROR, ft.getMessage(), ft.getThrowable());
563 }
564 }
565
566
567
568
569
570
571
572
573
574
575 public void error(String msg, Throwable t) {
576 logger.log(FQCN, Level.ERROR, msg, t);
577 }
578
579 public void log(Marker marker, String callerFQCN, int level, String msg, Object[] argArray, Throwable t) {
580 Level log4jLevel = toLog4jLevel(level);
581 logger.log(callerFQCN, log4jLevel, msg, t);
582 }
583
584 private Level toLog4jLevel(int level) {
585 Level log4jLevel;
586 switch (level) {
587 case LocationAwareLogger.TRACE_INT:
588 log4jLevel = traceCapable ? Level.TRACE : Level.DEBUG;
589 break;
590 case LocationAwareLogger.DEBUG_INT:
591 log4jLevel = Level.DEBUG;
592 break;
593 case LocationAwareLogger.INFO_INT:
594 log4jLevel = Level.INFO;
595 break;
596 case LocationAwareLogger.WARN_INT:
597 log4jLevel = Level.WARN;
598 break;
599 case LocationAwareLogger.ERROR_INT:
600 log4jLevel = Level.ERROR;
601 break;
602 default:
603 throw new IllegalStateException("Level number " + level + " is not recognized.");
604 }
605 return log4jLevel;
606 }
607
608 public void log(LoggingEvent event) {
609 Level log4jLevel = toLog4jLevel(event.getLevel().toInt());
610 if (!logger.isEnabledFor(log4jLevel))
611 return;
612
613 org.apache.log4j.spi.LoggingEvent log4jevent = toLog4jEvent(event, log4jLevel);
614 logger.callAppenders(log4jevent);
615
616 }
617
618 private org.apache.log4j.spi.LoggingEvent toLog4jEvent(LoggingEvent event, Level log4jLevel) {
619
620 FormattingTuple ft = MessageFormatter.format(event.getMessage(), event.getArgumentArray(), event.getThrowable());
621
622 LocationInfo locationInfo = new LocationInfo(NA_SUBST, NA_SUBST, NA_SUBST, "0");
623
624 ThrowableInformation ti = null;
625 Throwable t = ft.getThrowable();
626 if (t != null)
627 ti = new ThrowableInformation(t);
628
629 org.apache.log4j.spi.LoggingEvent log4jEvent = new org.apache.log4j.spi.LoggingEvent(FQCN, logger, event.getTimeStamp(), log4jLevel, ft.getMessage(),
630 event.getThreadName(), ti, null, locationInfo, null);
631
632 return log4jEvent;
633 }
634
635 }