1 // ========================================================================
2 // Copyright (c) Webtide LLC
3 // ------------------------------------------------------------------------
4 // All rights reserved. This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v1.0
6 // and Apache License v2.0 which accompanies this distribution.
7 // The Eclipse Public License is available at
8 // http://www.eclipse.org/legal/epl-v10.html
9 // The Apache License v2.0 is available at
10 // http://www.opensource.org/licenses/apache2.0.php
11 // You may elect to redistribute this code under either of these licenses.
12 // ========================================================================
13 package org.eclipse.jetty.util.log;
14
15 import org.slf4j.Marker;
16 import org.slf4j.helpers.FormattingTuple;
17 import org.slf4j.helpers.MessageFormatter;
18
19 /**
20 * JettyAwareLogger is used to fix a FQCN bug that arises from how Jetty
21 * Log uses an indirect slf4j implementation.
22 *
23 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=276670
24 */
25 class JettyAwareLogger implements org.slf4j.Logger
26 {
27 private static final int DEBUG = org.slf4j.spi.LocationAwareLogger.DEBUG_INT;
28 private static final int ERROR = org.slf4j.spi.LocationAwareLogger.ERROR_INT;
29 private static final int INFO = org.slf4j.spi.LocationAwareLogger.INFO_INT;
30 private static final int TRACE = org.slf4j.spi.LocationAwareLogger.TRACE_INT;
31 private static final int WARN = org.slf4j.spi.LocationAwareLogger.WARN_INT;
32
33 private static final String FQCN = Slf4jLog.class.getName();
34 private final org.slf4j.spi.LocationAwareLogger _logger;
35
36 public JettyAwareLogger(org.slf4j.spi.LocationAwareLogger logger)
37 {
38 _logger = logger;
39 }
40
41 /* ------------------------------------------------------------ */
42 /**
43 * @see org.slf4j.Logger#getName()
44 */
45 public String getName()
46 {
47 return _logger.getName();
48 }
49
50 /* ------------------------------------------------------------ */
51 /**
52 * @see org.slf4j.Logger#isTraceEnabled()
53 */
54 public boolean isTraceEnabled()
55 {
56 return _logger.isTraceEnabled();
57 }
58
59 /* ------------------------------------------------------------ */
60 /**
61 * @see org.slf4j.Logger#trace(java.lang.String)
62 */
63 public void trace(String msg)
64 {
65 log(null, TRACE, msg, null, null);
66 }
67
68 /* ------------------------------------------------------------ */
69 /**
70 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object)
71 */
72 public void trace(String format, Object arg)
73 {
74 log(null, TRACE, format, new Object[]{arg}, null);
75 }
76
77 /* ------------------------------------------------------------ */
78 /**
79 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object, java.lang.Object)
80 */
81 public void trace(String format, Object arg1, Object arg2)
82 {
83 log(null, TRACE, format, new Object[]{arg1,arg2}, null);
84 }
85
86 /* ------------------------------------------------------------ */
87 /**
88 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object[])
89 */
90 public void trace(String format, Object[] argArray)
91 {
92 log(null, TRACE, format, argArray, null);
93 }
94
95 /* ------------------------------------------------------------ */
96 /**
97 * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Throwable)
98 */
99 public void trace(String msg, Throwable t)
100 {
101 log(null, TRACE, msg, null, t);
102 }
103
104 /* ------------------------------------------------------------ */
105 /**
106 * @see org.slf4j.Logger#isTraceEnabled(org.slf4j.Marker)
107 */
108 public boolean isTraceEnabled(Marker marker)
109 {
110 return _logger.isTraceEnabled(marker);
111 }
112
113 /* ------------------------------------------------------------ */
114 /**
115 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String)
116 */
117 public void trace(Marker marker, String msg)
118 {
119 log(marker, TRACE, msg, null, null);
120 }
121
122 /* ------------------------------------------------------------ */
123 /**
124 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object)
125 */
126 public void trace(Marker marker, String format, Object arg)
127 {
128 log(marker, TRACE, format, new Object[]{arg}, null);
129 }
130
131 /* ------------------------------------------------------------ */
132 /**
133 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
134 */
135 public void trace(Marker marker, String format, Object arg1, Object arg2)
136 {
137 log(marker, TRACE, format, new Object[]{arg1,arg2}, null);
138 }
139
140 /* ------------------------------------------------------------ */
141 /**
142 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object[])
143 */
144 public void trace(Marker marker, String format, Object[] argArray)
145 {
146 log(marker, TRACE, format, argArray, null);
147 }
148
149 /* ------------------------------------------------------------ */
150 /**
151 * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
152 */
153 public void trace(Marker marker, String msg, Throwable t)
154 {
155 log(marker, TRACE, msg, null, t);
156 }
157
158 /* ------------------------------------------------------------ */
159 /**
160 * @see org.slf4j.Logger#isDebugEnabled()
161 */
162 public boolean isDebugEnabled()
163 {
164 return _logger.isDebugEnabled();
165 }
166
167 /* ------------------------------------------------------------ */
168 /**
169 * @see org.slf4j.Logger#debug(java.lang.String)
170 */
171 public void debug(String msg)
172 {
173 log(null, DEBUG, msg, null, null);
174 }
175
176 /* ------------------------------------------------------------ */
177 /**
178 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object)
179 */
180 public void debug(String format, Object arg)
181 {
182 log(null, DEBUG, format, new Object[]{arg}, null);
183 }
184
185 /* ------------------------------------------------------------ */
186 /**
187 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object, java.lang.Object)
188 */
189 public void debug(String format, Object arg1, Object arg2)
190 {
191 log(null, DEBUG, format, new Object[]{arg1,arg2}, null);
192 }
193
194 /* ------------------------------------------------------------ */
195 /**
196 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object[])
197 */
198 public void debug(String format, Object[] argArray)
199 {
200 log(null, DEBUG, format, argArray, null);
201 }
202
203 /* ------------------------------------------------------------ */
204 /**
205 * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Throwable)
206 */
207 public void debug(String msg, Throwable t)
208 {
209 log(null, DEBUG, msg, null, t);
210 }
211
212 /* ------------------------------------------------------------ */
213 /**
214 * @see org.slf4j.Logger#isDebugEnabled(org.slf4j.Marker)
215 */
216 public boolean isDebugEnabled(Marker marker)
217 {
218 return _logger.isDebugEnabled(marker);
219 }
220
221 /* ------------------------------------------------------------ */
222 /**
223 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String)
224 */
225 public void debug(Marker marker, String msg)
226 {
227 log(marker, DEBUG, msg, null, null);
228 }
229
230 /* ------------------------------------------------------------ */
231 /**
232 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object)
233 */
234 public void debug(Marker marker, String format, Object arg)
235 {
236 log(marker, DEBUG, format, new Object[]{arg}, null);
237 }
238
239 /* ------------------------------------------------------------ */
240 /**
241 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
242 */
243 public void debug(Marker marker, String format, Object arg1, Object arg2)
244 {
245 log(marker, DEBUG, format, new Object[]{arg1,arg2}, null);
246 }
247
248 /* ------------------------------------------------------------ */
249 /**
250 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object[])
251 */
252 public void debug(Marker marker, String format, Object[] argArray)
253 {
254 log(marker, DEBUG, format, argArray, null);
255 }
256
257 /* ------------------------------------------------------------ */
258 /**
259 * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
260 */
261 public void debug(Marker marker, String msg, Throwable t)
262 {
263 log(marker, DEBUG, msg, null, t);
264 }
265
266 /* ------------------------------------------------------------ */
267 /**
268 * @see org.slf4j.Logger#isInfoEnabled()
269 */
270 public boolean isInfoEnabled()
271 {
272 return _logger.isInfoEnabled();
273 }
274
275 /* ------------------------------------------------------------ */
276 /**
277 * @see org.slf4j.Logger#info(java.lang.String)
278 */
279 public void info(String msg)
280 {
281 log(null, INFO, msg, null, null);
282 }
283
284 /* ------------------------------------------------------------ */
285 /**
286 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object)
287 */
288 public void info(String format, Object arg)
289 {
290 log(null, INFO, format, new Object[]{arg}, null);
291 }
292
293 /* ------------------------------------------------------------ */
294 /**
295 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object, java.lang.Object)
296 */
297 public void info(String format, Object arg1, Object arg2)
298 {
299 log(null, INFO, format, new Object[]{arg1,arg2}, null);
300 }
301
302 /* ------------------------------------------------------------ */
303 /**
304 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object[])
305 */
306 public void info(String format, Object[] argArray)
307 {
308 log(null, INFO, format, argArray, null);
309 }
310
311 /* ------------------------------------------------------------ */
312 /**
313 * @see org.slf4j.Logger#info(java.lang.String, java.lang.Throwable)
314 */
315 public void info(String msg, Throwable t)
316 {
317 log(null, INFO, msg, null, t);
318 }
319
320 /* ------------------------------------------------------------ */
321 /**
322 * @see org.slf4j.Logger#isInfoEnabled(org.slf4j.Marker)
323 */
324 public boolean isInfoEnabled(Marker marker)
325 {
326 return _logger.isInfoEnabled(marker);
327 }
328
329 /* ------------------------------------------------------------ */
330 /**
331 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String)
332 */
333 public void info(Marker marker, String msg)
334 {
335 log(marker, INFO, msg, null, null);
336 }
337
338 /* ------------------------------------------------------------ */
339 /**
340 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object)
341 */
342 public void info(Marker marker, String format, Object arg)
343 {
344 log(marker, INFO, format, new Object[]{arg}, null);
345 }
346
347 /* ------------------------------------------------------------ */
348 /**
349 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
350 */
351 public void info(Marker marker, String format, Object arg1, Object arg2)
352 {
353 log(marker, INFO, format, new Object[]{arg1,arg2}, null);
354 }
355
356 /* ------------------------------------------------------------ */
357 /**
358 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object[])
359 */
360 public void info(Marker marker, String format, Object[] argArray)
361 {
362 log(marker, INFO, format, argArray, null);
363 }
364
365 /* ------------------------------------------------------------ */
366 /**
367 * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
368 */
369 public void info(Marker marker, String msg, Throwable t)
370 {
371 log(marker, INFO, msg, null, t);
372 }
373
374 /* ------------------------------------------------------------ */
375 /**
376 * @see org.slf4j.Logger#isWarnEnabled()
377 */
378 public boolean isWarnEnabled()
379 {
380 return _logger.isWarnEnabled();
381 }
382
383 /* ------------------------------------------------------------ */
384 /**
385 * @see org.slf4j.Logger#warn(java.lang.String)
386 */
387 public void warn(String msg)
388 {
389 log(null, WARN, msg, null, null);
390 }
391
392 /* ------------------------------------------------------------ */
393 /**
394 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object)
395 */
396 public void warn(String format, Object arg)
397 {
398 log(null, WARN, format, new Object[]{arg}, null);
399 }
400
401 /* ------------------------------------------------------------ */
402 /**
403 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object[])
404 */
405 public void warn(String format, Object[] argArray)
406 {
407 log(null, WARN, format, argArray, null);
408 }
409
410 /* ------------------------------------------------------------ */
411 /**
412 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object, java.lang.Object)
413 */
414 public void warn(String format, Object arg1, Object arg2)
415 {
416 log(null, WARN, format, new Object[]{arg1,arg2}, null);
417 }
418
419 /* ------------------------------------------------------------ */
420 /**
421 * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Throwable)
422 */
423 public void warn(String msg, Throwable t)
424 {
425 log(null, WARN, msg, null, t);
426 }
427
428 /* ------------------------------------------------------------ */
429 /**
430 * @see org.slf4j.Logger#isWarnEnabled(org.slf4j.Marker)
431 */
432 public boolean isWarnEnabled(Marker marker)
433 {
434 return _logger.isWarnEnabled(marker);
435 }
436
437 /* ------------------------------------------------------------ */
438 /**
439 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String)
440 */
441 public void warn(Marker marker, String msg)
442 {
443 log(marker, WARN, msg, null, null);
444 }
445
446 /* ------------------------------------------------------------ */
447 /**
448 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object)
449 */
450 public void warn(Marker marker, String format, Object arg)
451 {
452 log(marker, WARN, format, new Object[]{arg}, null);
453 }
454
455 /* ------------------------------------------------------------ */
456 /**
457 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
458 */
459 public void warn(Marker marker, String format, Object arg1, Object arg2)
460 {
461 log(marker, WARN, format, new Object[]{arg1,arg2}, null);
462 }
463
464 /* ------------------------------------------------------------ */
465 /**
466 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object[])
467 */
468 public void warn(Marker marker, String format, Object[] argArray)
469 {
470 log(marker, WARN, format, argArray, null);
471 }
472
473 /* ------------------------------------------------------------ */
474 /**
475 * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
476 */
477 public void warn(Marker marker, String msg, Throwable t)
478 {
479 log(marker, WARN, msg, null, t);
480 }
481
482 /* ------------------------------------------------------------ */
483 /**
484 * @see org.slf4j.Logger#isErrorEnabled()
485 */
486 public boolean isErrorEnabled()
487 {
488 return _logger.isErrorEnabled();
489 }
490
491 /* ------------------------------------------------------------ */
492 /**
493 * @see org.slf4j.Logger#error(java.lang.String)
494 */
495 public void error(String msg)
496 {
497 log(null, ERROR, msg, null, null);
498 }
499
500 /* ------------------------------------------------------------ */
501 /**
502 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object)
503 */
504 public void error(String format, Object arg)
505 {
506 log(null, ERROR, format, new Object[]{arg}, null);
507 }
508
509 /* ------------------------------------------------------------ */
510 /**
511 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object, java.lang.Object)
512 */
513 public void error(String format, Object arg1, Object arg2)
514 {
515 log(null, ERROR, format, new Object[]{arg1,arg2}, null);
516 }
517
518 /* ------------------------------------------------------------ */
519 /**
520 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object[])
521 */
522 public void error(String format, Object[] argArray)
523 {
524 log(null, ERROR, format, argArray, null);
525 }
526
527 /* ------------------------------------------------------------ */
528 /**
529 * @see org.slf4j.Logger#error(java.lang.String, java.lang.Throwable)
530 */
531 public void error(String msg, Throwable t)
532 {
533 log(null, ERROR, msg, null, t);
534 }
535
536 /* ------------------------------------------------------------ */
537 /**
538 * @see org.slf4j.Logger#isErrorEnabled(org.slf4j.Marker)
539 */
540 public boolean isErrorEnabled(Marker marker)
541 {
542 return _logger.isErrorEnabled(marker);
543 }
544
545 /* ------------------------------------------------------------ */
546 /**
547 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String)
548 */
549 public void error(Marker marker, String msg)
550 {
551 log(marker, ERROR, msg, null, null);
552 }
553
554 /* ------------------------------------------------------------ */
555 /**
556 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object)
557 */
558 public void error(Marker marker, String format, Object arg)
559 {
560 log(marker, ERROR, format, new Object[]{arg}, null);
561 }
562
563 /* ------------------------------------------------------------ */
564 /**
565 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
566 */
567 public void error(Marker marker, String format, Object arg1, Object arg2)
568 {
569 log(marker, ERROR, format, new Object[]{arg1,arg2}, null);
570 }
571
572 /* ------------------------------------------------------------ */
573 /**
574 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object[])
575 */
576 public void error(Marker marker, String format, Object[] argArray)
577 {
578 log(marker, ERROR, format, argArray, null);
579 }
580
581 /* ------------------------------------------------------------ */
582 /**
583 * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
584 */
585 public void error(Marker marker, String msg, Throwable t)
586 {
587 log(marker, ERROR, msg, null, t);
588 }
589
590 @Override
591 public String toString()
592 {
593 return _logger.toString();
594 }
595
596 private void log(Marker marker, int level, String msg, Object[] argArray, Throwable t)
597 {
598 if (argArray == null)
599 {
600 // Simple SLF4J Message (no args)
601 _logger.log(marker, FQCN, level, msg, null, t);
602 }
603 else
604 {
605 int loggerLevel = _logger.isTraceEnabled() ? TRACE :
606 _logger.isDebugEnabled() ? DEBUG :
607 _logger.isInfoEnabled() ? INFO :
608 _logger.isWarnEnabled() ? WARN : ERROR;
609 if (loggerLevel <= level)
610 {
611 // Don't assume downstream handles argArray properly.
612 // Do it the SLF4J way here to eliminate that as a bug.
613 FormattingTuple ft = MessageFormatter.arrayFormat(msg, argArray);
614 _logger.log(marker, FQCN, level, ft.getMessage(), null, t);
615 }
616 }
617 }
618 }