View Javadoc

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