View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements. See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache license, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License. You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the license for the specific language governing permissions and
15   * limitations under the license.
16   */
17  package org.apache.logging.log4j.spi;
18  
19  import java.io.Serializable;
20  
21  import org.apache.logging.log4j.Level;
22  import org.apache.logging.log4j.Marker;
23  import org.apache.logging.log4j.MarkerManager;
24  import org.apache.logging.log4j.message.Message;
25  import org.apache.logging.log4j.message.MessageFactory;
26  import org.apache.logging.log4j.message.ParameterizedMessageFactory;
27  import org.apache.logging.log4j.message.StringFormattedMessage;
28  import org.apache.logging.log4j.status.StatusLogger;
29  import org.apache.logging.log4j.util.LambdaUtil;
30  import org.apache.logging.log4j.util.MessageSupplier;
31  import org.apache.logging.log4j.util.Supplier;
32  
33  /**
34   * Base implementation of a Logger. It is highly recommended that any Logger implementation extend this class.
35   */
36  public abstract class AbstractLogger implements ExtendedLogger, Serializable {
37  
38      /**
39       * Marker for flow tracing.
40       */
41      public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW");
42  
43      /**
44       * Marker for method entry tracing.
45       */
46      public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTRY").setParents(FLOW_MARKER);
47  
48      /**
49       * Marker for method exit tracing.
50       */
51      public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER);
52  
53      /**
54       * Marker for exception tracing.
55       */
56      public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION");
57  
58      /**
59       * Marker for throwing exceptions.
60       */
61      public static final Marker THROWING_MARKER = MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER);
62  
63      /**
64       * Marker for catching exceptions.
65       */
66      public static final Marker CATCHING_MARKER = MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER);
67  
68      /**
69       * The default MessageFactory class.
70       */
71      public static final Class<? extends MessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS =
72              ParameterizedMessageFactory.class;
73  
74      private static final long serialVersionUID = 2L;
75  
76      private static final String FQCN = AbstractLogger.class.getName();
77      private static final String THROWING = "throwing";
78      private static final String CATCHING = "catching";
79  
80      private final String name;
81      private final MessageFactory messageFactory;
82  
83      /**
84       * Creates a new logger named after this class (or subclass).
85       */
86      public AbstractLogger() {
87          this.name = getClass().getName();
88          this.messageFactory = createDefaultMessageFactory();
89      }
90  
91      /**
92       * Creates a new named logger.
93       *
94       * @param name the logger name
95       */
96      public AbstractLogger(final String name) {
97          this.name = name;
98          this.messageFactory = createDefaultMessageFactory();
99      }
100 
101     /**
102      * Creates a new named logger with a particular {@link MessageFactory}.
103      *
104      * @param name the logger name
105      * @param messageFactory the message factory, if null then use the default message factory.
106      */
107     public AbstractLogger(final String name, final MessageFactory messageFactory) {
108         this.name = name;
109         this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : messageFactory;
110     }
111 
112     /**
113      * Checks that the message factory a logger was created with is the same as the given messageFactory. If they are
114      * different log a warning to the {@linkplain StatusLogger}. A null MessageFactory translates to the default
115      * MessageFactory {@link #DEFAULT_MESSAGE_FACTORY_CLASS}.
116      *
117      * @param logger The logger to check
118      * @param messageFactory The message factory to check.
119      */
120     public static void checkMessageFactory(final ExtendedLogger logger, final MessageFactory messageFactory) {
121         final String name = logger.getName();
122         final MessageFactory loggerMessageFactory = logger.getMessageFactory();
123         if (messageFactory != null && !loggerMessageFactory.equals(messageFactory)) {
124             StatusLogger.getLogger().warn(
125                     "The Logger {} was created with the message factory {} and is now requested with the "
126                             + "message factory {}, which may create log events with unexpected formatting.", name,
127                     loggerMessageFactory, messageFactory);
128         } else if (messageFactory == null && !loggerMessageFactory.getClass().equals(DEFAULT_MESSAGE_FACTORY_CLASS)) {
129             StatusLogger
130                     .getLogger()
131                     .warn("The Logger {} was created with the message factory {} and is now requested with a null "
132                             + "message factory (defaults to {}), which may create log events with unexpected "
133                             + "formatting.",
134                             name, loggerMessageFactory, DEFAULT_MESSAGE_FACTORY_CLASS.getName());
135         }
136     }
137 
138     @Override
139     public void catching(final Level level, final Throwable t) {
140         catching(FQCN, level, t);
141     }
142 
143     /**
144      * Logs a Throwable that has been caught with location information.
145      *
146      * @param fqcn The fully qualified class name of the <b>caller</b>.
147      * @param level The logging level.
148      * @param t The Throwable.
149      */
150     protected void catching(final String fqcn, final Level level, final Throwable t) {
151         if (isEnabled(level, CATCHING_MARKER, (Object) null, null)) {
152             logMessage(fqcn, level, CATCHING_MARKER, catchingMsg(t), t);
153         }
154     }
155 
156     @Override
157     public void catching(final Throwable t) {
158         if (isEnabled(Level.ERROR, CATCHING_MARKER, (Object) null, null)) {
159             logMessage(FQCN, Level.ERROR, CATCHING_MARKER, catchingMsg(t), t);
160         }
161     }
162 
163     protected Message catchingMsg(final Throwable t) {
164         return messageFactory.newMessage(CATCHING);
165     }
166 
167     private MessageFactory createDefaultMessageFactory() {
168         try {
169             return DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
170         } catch (final InstantiationException e) {
171             throw new IllegalStateException(e);
172         } catch (final IllegalAccessException e) {
173             throw new IllegalStateException(e);
174         }
175     }
176 
177     @Override
178     public void debug(final Marker marker, final Message msg) {
179         logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
180     }
181 
182     @Override
183     public void debug(final Marker marker, final Message msg, final Throwable t) {
184         logIfEnabled(FQCN, Level.DEBUG, marker, msg, t);
185     }
186 
187     @Override
188     public void debug(final Marker marker, final Object message) {
189         logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
190     }
191 
192     @Override
193     public void debug(final Marker marker, final Object message, final Throwable t) {
194         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
195     }
196 
197     @Override
198     public void debug(final Marker marker, final String message) {
199         logIfEnabled(FQCN, Level.DEBUG, marker, message, (Throwable) null);
200     }
201 
202     @Override
203     public void debug(final Marker marker, final String message, final Object... params) {
204         logIfEnabled(FQCN, Level.DEBUG, marker, message, params);
205     }
206 
207     @Override
208     public void debug(final Marker marker, final String message, final Throwable t) {
209         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
210     }
211 
212     @Override
213     public void debug(final Message msg) {
214         logIfEnabled(FQCN, Level.DEBUG, null, msg, null);
215     }
216 
217     @Override
218     public void debug(final Message msg, final Throwable t) {
219         logIfEnabled(FQCN, Level.DEBUG, null, msg, t);
220     }
221 
222     @Override
223     public void debug(final Object message) {
224         logIfEnabled(FQCN, Level.DEBUG, null, message, null);
225     }
226 
227     @Override
228     public void debug(final Object message, final Throwable t) {
229         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
230     }
231 
232     @Override
233     public void debug(final String message) {
234         logIfEnabled(FQCN, Level.DEBUG, null, message, (Throwable) null);
235     }
236 
237     @Override
238     public void debug(final String message, final Object... params) {
239         logIfEnabled(FQCN, Level.DEBUG, null, message, params);
240     }
241 
242     @Override
243     public void debug(final String message, final Throwable t) {
244         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
245     }
246 
247     @Override
248     public void debug(final Supplier<?> msgSupplier) {
249         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
250     }
251 
252     @Override
253     public void debug(final Supplier<?> msgSupplier, final Throwable t) {
254         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
255     }
256 
257     @Override
258     public void debug(final Marker marker, final Supplier<?> msgSupplier) {
259         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
260     }
261 
262     @Override
263     public void debug(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
264         logIfEnabled(FQCN, Level.DEBUG, marker, message, paramSuppliers);
265     }
266 
267     @Override
268     public void debug(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
269         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
270     }
271 
272     @Override
273     public void debug(final String message, final Supplier<?>... paramSuppliers) {
274         logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers);
275     }
276 
277     @Override
278     public void debug(final Marker marker, final MessageSupplier msgSupplier) {
279         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
280     }
281 
282     @Override
283     public void debug(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
284         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
285     }
286 
287     @Override
288     public void debug(final MessageSupplier msgSupplier) {
289         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
290     }
291 
292     @Override
293     public void debug(final MessageSupplier msgSupplier, final Throwable t) {
294         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
295     }
296 
297     @Override
298     public void entry() {
299         entry(FQCN);
300     }
301 
302     @Override
303     public void entry(final Object... params) {
304         entry(FQCN, params);
305     }
306 
307     /**
308      * Logs entry to a method with location information.
309      *
310      * @param fqcn The fully qualified class name of the <b>caller</b>.
311      * @param params The parameters to the method.
312      */
313     protected void entry(final String fqcn, final Object... params) {
314         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
315             logIfEnabled(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(params.length, params), null);
316         }
317     }
318 
319     protected Message entryMsg(final int count, final Object... params) {
320         if (count == 0) {
321             return messageFactory.newMessage("entry");
322         }
323         final StringBuilder sb = new StringBuilder("entry params(");
324         for (int i = 0; i < params.length; i++) {
325             Object parm = params[i];
326             sb.append(parm != null ? parm.toString() : "null");
327             if (i + 1 < params.length) {
328                 sb.append(", ");
329             }
330         }
331         sb.append(')');
332         return messageFactory.newMessage(sb.toString());
333     }
334 
335     @Override
336     public void error(final Marker marker, final Message msg) {
337         logIfEnabled(FQCN, Level.ERROR, marker, msg, null);
338     }
339 
340     @Override
341     public void error(final Marker marker, final Message msg, final Throwable t) {
342         logIfEnabled(FQCN, Level.ERROR, marker, msg, t);
343     }
344 
345     @Override
346     public void error(final Marker marker, final Object message) {
347         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
348     }
349 
350     @Override
351     public void error(final Marker marker, final Object message, final Throwable t) {
352         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
353     }
354 
355     @Override
356     public void error(final Marker marker, final String message) {
357         logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null);
358     }
359 
360     @Override
361     public void error(final Marker marker, final String message, final Object... params) {
362         logIfEnabled(FQCN, Level.ERROR, marker, message, params);
363     }
364 
365     @Override
366     public void error(final Marker marker, final String message, final Throwable t) {
367         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
368     }
369 
370     @Override
371     public void error(final Message msg) {
372         logIfEnabled(FQCN, Level.ERROR, null, msg, null);
373     }
374 
375     @Override
376     public void error(final Message msg, final Throwable t) {
377         logIfEnabled(FQCN, Level.ERROR, null, msg, t);
378     }
379 
380     @Override
381     public void error(final Object message) {
382         logIfEnabled(FQCN, Level.ERROR, null, message, null);
383     }
384 
385     @Override
386     public void error(final Object message, final Throwable t) {
387         logIfEnabled(FQCN, Level.ERROR, null, message, t);
388     }
389 
390     @Override
391     public void error(final String message) {
392         logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null);
393     }
394 
395     @Override
396     public void error(final String message, final Object... params) {
397         logIfEnabled(FQCN, Level.ERROR, null, message, params);
398     }
399 
400     @Override
401     public void error(final String message, final Throwable t) {
402         logIfEnabled(FQCN, Level.ERROR, null, message, t);
403     }
404 
405     @Override
406     public void error(final Supplier<?> msgSupplier) {
407         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
408     }
409 
410     @Override
411     public void error(final Supplier<?> msgSupplier, final Throwable t) {
412         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
413     }
414 
415     @Override
416     public void error(final Marker marker, final Supplier<?> msgSupplier) {
417         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
418     }
419 
420     @Override
421     public void error(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
422         logIfEnabled(FQCN, Level.ERROR, marker, message, paramSuppliers);
423     }
424 
425     @Override
426     public void error(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
427         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
428     }
429 
430     @Override
431     public void error(final String message, final Supplier<?>... paramSuppliers) {
432         logIfEnabled(FQCN, Level.ERROR, null, message, paramSuppliers);
433     }
434 
435     @Override
436     public void error(final Marker marker, final MessageSupplier msgSupplier) {
437         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
438     }
439 
440     @Override
441     public void error(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
442         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
443     }
444 
445     @Override
446     public void error(final MessageSupplier msgSupplier) {
447         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
448     }
449 
450     @Override
451     public void error(final MessageSupplier msgSupplier, final Throwable t) {
452         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
453     }
454 
455     @Override
456     public void exit() {
457         exit(FQCN, null);
458     }
459 
460     @Override
461     public <R> R exit(final R result) {
462         return exit(FQCN, result);
463     }
464 
465     /**
466      * Logs exiting from a method with the result and location information.
467      *
468      * @param fqcn The fully qualified class name of the <b>caller</b>.
469      * @param <R> The type of the parameter and object being returned.
470      * @param result The result being returned from the method call.
471      * @return the return value passed to this method.
472      */
473     protected <R> R exit(final String fqcn, final R result) {
474         if (isEnabled(Level.TRACE, EXIT_MARKER, (Object) null, null)) {
475             logIfEnabled(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(result), null);
476         }
477         return result;
478     }
479 
480     protected Message exitMsg(final Object result) {
481         if (result == null) {
482             return messageFactory.newMessage("exit");
483         }
484         return messageFactory.newMessage("exit with(" + result + ')');
485     }
486 
487     @Override
488     public void fatal(final Marker marker, final Message msg) {
489         logIfEnabled(FQCN, Level.FATAL, marker, msg, null);
490     }
491 
492     @Override
493     public void fatal(final Marker marker, final Message msg, final Throwable t) {
494         logIfEnabled(FQCN, Level.FATAL, marker, msg, t);
495     }
496 
497     @Override
498     public void fatal(final Marker marker, final Object message) {
499         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
500     }
501 
502     @Override
503     public void fatal(final Marker marker, final Object message, final Throwable t) {
504         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
505     }
506 
507     @Override
508     public void fatal(final Marker marker, final String message) {
509         logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null);
510     }
511 
512     @Override
513     public void fatal(final Marker marker, final String message, final Object... params) {
514         logIfEnabled(FQCN, Level.FATAL, marker, message, params);
515     }
516 
517     @Override
518     public void fatal(final Marker marker, final String message, final Throwable t) {
519         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
520     }
521 
522     @Override
523     public void fatal(final Message msg) {
524         logIfEnabled(FQCN, Level.FATAL, null, msg, null);
525     }
526 
527     @Override
528     public void fatal(final Message msg, final Throwable t) {
529         logIfEnabled(FQCN, Level.FATAL, null, msg, t);
530     }
531 
532     @Override
533     public void fatal(final Object message) {
534         logIfEnabled(FQCN, Level.FATAL, null, message, null);
535     }
536 
537     @Override
538     public void fatal(final Object message, final Throwable t) {
539         logIfEnabled(FQCN, Level.FATAL, null, message, t);
540     }
541 
542     @Override
543     public void fatal(final String message) {
544         logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null);
545     }
546 
547     @Override
548     public void fatal(final String message, final Object... params) {
549         logIfEnabled(FQCN, Level.FATAL, null, message, params);
550     }
551 
552     @Override
553     public void fatal(final String message, final Throwable t) {
554         logIfEnabled(FQCN, Level.FATAL, null, message, t);
555     }
556 
557     @Override
558     public void fatal(final Supplier<?> msgSupplier) {
559         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
560     }
561 
562     @Override
563     public void fatal(final Supplier<?> msgSupplier, final Throwable t) {
564         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
565     }
566 
567     @Override
568     public void fatal(final Marker marker, final Supplier<?> msgSupplier) {
569         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
570     }
571 
572     @Override
573     public void fatal(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
574         logIfEnabled(FQCN, Level.FATAL, marker, message, paramSuppliers);
575     }
576 
577     @Override
578     public void fatal(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
579         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
580     }
581 
582     @Override
583     public void fatal(final String message, final Supplier<?>... paramSuppliers) {
584         logIfEnabled(FQCN, Level.FATAL, null, message, paramSuppliers);
585     }
586 
587     @Override
588     public void fatal(final Marker marker, final MessageSupplier msgSupplier) {
589         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
590     }
591 
592     @Override
593     public void fatal(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
594         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
595     }
596 
597     @Override
598     public void fatal(final MessageSupplier msgSupplier) {
599         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
600     }
601 
602     @Override
603     public void fatal(final MessageSupplier msgSupplier, final Throwable t) {
604         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
605     }
606 
607     @Override
608     public MessageFactory getMessageFactory() {
609         return messageFactory;
610     }
611 
612     @Override
613     public String getName() {
614         return name;
615     }
616 
617     @Override
618     public void info(final Marker marker, final Message msg) {
619         logIfEnabled(FQCN, Level.INFO, marker, msg, null);
620     }
621 
622     @Override
623     public void info(final Marker marker, final Message msg, final Throwable t) {
624         logIfEnabled(FQCN, Level.INFO, marker, msg, t);
625     }
626 
627     @Override
628     public void info(final Marker marker, final Object message) {
629         logIfEnabled(FQCN, Level.INFO, marker, message, null);
630     }
631 
632     @Override
633     public void info(final Marker marker, final Object message, final Throwable t) {
634         logIfEnabled(FQCN, Level.INFO, marker, message, t);
635     }
636 
637     @Override
638     public void info(final Marker marker, final String message) {
639         logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null);
640     }
641 
642     @Override
643     public void info(final Marker marker, final String message, final Object... params) {
644         logIfEnabled(FQCN, Level.INFO, marker, message, params);
645     }
646 
647     @Override
648     public void info(final Marker marker, final String message, final Throwable t) {
649         logIfEnabled(FQCN, Level.INFO, marker, message, t);
650     }
651 
652     @Override
653     public void info(final Message msg) {
654         logIfEnabled(FQCN, Level.INFO, null, msg, null);
655     }
656 
657     @Override
658     public void info(final Message msg, final Throwable t) {
659         logIfEnabled(FQCN, Level.INFO, null, msg, t);
660     }
661 
662     @Override
663     public void info(final Object message) {
664         logIfEnabled(FQCN, Level.INFO, null, message, null);
665     }
666 
667     @Override
668     public void info(final Object message, final Throwable t) {
669         logIfEnabled(FQCN, Level.INFO, null, message, t);
670     }
671 
672     @Override
673     public void info(final String message) {
674         logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
675     }
676 
677     @Override
678     public void info(final String message, final Object... params) {
679         logIfEnabled(FQCN, Level.INFO, null, message, params);
680     }
681 
682     @Override
683     public void info(final String message, final Throwable t) {
684         logIfEnabled(FQCN, Level.INFO, null, message, t);
685     }
686 
687     @Override
688     public void info(final Supplier<?> msgSupplier) {
689         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
690     }
691 
692     @Override
693     public void info(final Supplier<?> msgSupplier, final Throwable t) {
694         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
695     }
696 
697     @Override
698     public void info(final Marker marker, final Supplier<?> msgSupplier) {
699         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
700     }
701 
702     @Override
703     public void info(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
704         logIfEnabled(FQCN, Level.INFO, marker, message, paramSuppliers);
705     }
706 
707     @Override
708     public void info(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
709         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
710     }
711 
712     @Override
713     public void info(final String message, final Supplier<?>... paramSuppliers) {
714         logIfEnabled(FQCN, Level.INFO, null, message, paramSuppliers);
715     }
716 
717     @Override
718     public void info(final Marker marker, final MessageSupplier msgSupplier) {
719         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
720     }
721 
722     @Override
723     public void info(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
724         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
725     }
726 
727     @Override
728     public void info(final MessageSupplier msgSupplier) {
729         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
730     }
731 
732     @Override
733     public void info(final MessageSupplier msgSupplier, final Throwable t) {
734         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
735     }
736 
737     @Override
738     public boolean isDebugEnabled() {
739         return isEnabled(Level.DEBUG, null, null);
740     }
741 
742     @Override
743     public boolean isDebugEnabled(final Marker marker) {
744         return isEnabled(Level.DEBUG, marker, (Object) null, null);
745     }
746 
747     @Override
748     public boolean isEnabled(final Level level) {
749         return isEnabled(level, null, (Object) null, null);
750     }
751 
752     @Override
753     public boolean isEnabled(final Level level, final Marker marker) {
754         return isEnabled(level, marker, (Object) null, null);
755     }
756 
757     @Override
758     public boolean isErrorEnabled() {
759         return isEnabled(Level.ERROR, null, (Object) null, null);
760     }
761 
762     @Override
763     public boolean isErrorEnabled(final Marker marker) {
764         return isEnabled(Level.ERROR, marker, (Object) null, null);
765     }
766 
767     @Override
768     public boolean isFatalEnabled() {
769         return isEnabled(Level.FATAL, null, (Object) null, null);
770     }
771 
772     @Override
773     public boolean isFatalEnabled(final Marker marker) {
774         return isEnabled(Level.FATAL, marker, (Object) null, null);
775     }
776 
777     @Override
778     public boolean isInfoEnabled() {
779         return isEnabled(Level.INFO, null, (Object) null, null);
780     }
781 
782     @Override
783     public boolean isInfoEnabled(final Marker marker) {
784         return isEnabled(Level.INFO, marker, (Object) null, null);
785     }
786 
787     @Override
788     public boolean isTraceEnabled() {
789         return isEnabled(Level.TRACE, null, (Object) null, null);
790     }
791 
792     @Override
793     public boolean isTraceEnabled(final Marker marker) {
794         return isEnabled(Level.TRACE, marker, (Object) null, null);
795     }
796 
797     @Override
798     public boolean isWarnEnabled() {
799         return isEnabled(Level.WARN, null, (Object) null, null);
800     }
801 
802     @Override
803     public boolean isWarnEnabled(final Marker marker) {
804         return isEnabled(Level.WARN, marker, (Object) null, null);
805     }
806 
807     @Override
808     public void log(final Level level, final Marker marker, final Message msg) {
809         logIfEnabled(FQCN, level, marker, msg, (Throwable) null);
810     }
811 
812     @Override
813     public void log(final Level level, final Marker marker, final Message msg, final Throwable t) {
814         logIfEnabled(FQCN, level, marker, msg, t);
815     }
816 
817     @Override
818     public void log(final Level level, final Marker marker, final Object message) {
819         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
820     }
821 
822     @Override
823     public void log(final Level level, final Marker marker, final Object message, final Throwable t) {
824         if (isEnabled(level, marker, message, t)) {
825             logMessage(FQCN, level, marker, message, t);
826         }
827     }
828 
829     @Override
830     public void log(final Level level, final Marker marker, final String message) {
831         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
832     }
833 
834     @Override
835     public void log(final Level level, final Marker marker, final String message, final Object... params) {
836         logIfEnabled(FQCN, level, marker, message, params);
837     }
838 
839     @Override
840     public void log(final Level level, final Marker marker, final String message, final Throwable t) {
841         logIfEnabled(FQCN, level, marker, message, t);
842     }
843 
844     @Override
845     public void log(final Level level, final Message msg) {
846         logIfEnabled(FQCN, level, null, msg, null);
847     }
848 
849     @Override
850     public void log(final Level level, final Message msg, final Throwable t) {
851         logIfEnabled(FQCN, level, null, msg, t);
852     }
853 
854     @Override
855     public void log(final Level level, final Object message) {
856         logIfEnabled(FQCN, level, null, message, null);
857     }
858 
859     @Override
860     public void log(final Level level, final Object message, final Throwable t) {
861         logIfEnabled(FQCN, level, null, message, t);
862     }
863 
864     @Override
865     public void log(final Level level, final String message) {
866         logIfEnabled(FQCN, level, null, message, (Throwable) null);
867     }
868 
869     @Override
870     public void log(final Level level, final String message, final Object... params) {
871         logIfEnabled(FQCN, level, null, message, params);
872     }
873 
874     @Override
875     public void log(final Level level, final String message, final Throwable t) {
876         logIfEnabled(FQCN, level, null, message, t);
877     }
878 
879     @Override
880     public void log(final Level level, final Supplier<?> msgSupplier) {
881         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
882     }
883 
884     @Override
885     public void log(final Level level, final Supplier<?> msgSupplier, final Throwable t) {
886         logIfEnabled(FQCN, level, null, msgSupplier, t);
887     }
888 
889     @Override
890     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier) {
891         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
892     }
893 
894     @Override
895     public void log(final Level level, final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
896         logIfEnabled(FQCN, level, marker, message, paramSuppliers);
897     }
898 
899     @Override
900     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
901         logIfEnabled(FQCN, level, marker, msgSupplier, t);
902     }
903 
904     @Override
905     public void log(final Level level, final String message, final Supplier<?>... paramSuppliers) {
906         logIfEnabled(FQCN, level, null, message, paramSuppliers);
907     }
908 
909     @Override
910     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier) {
911         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
912     }
913 
914     @Override
915     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
916         logIfEnabled(FQCN, level, marker, msgSupplier, t);
917     }
918 
919     @Override
920     public void log(final Level level, final MessageSupplier msgSupplier) {
921         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
922     }
923 
924     @Override
925     public void log(final Level level, final MessageSupplier msgSupplier, final Throwable t) {
926         logIfEnabled(FQCN, level, null, msgSupplier, t);
927     }
928 
929     @Override
930     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
931             final Throwable t) {
932         if (isEnabled(level, marker, msg, t)) {
933             logMessage(fqcn, level, marker, msg, t);
934         }
935     }
936 
937     @Override
938     public void logIfEnabled(final String fqcn, final Level level, final Marker marker,
939             final MessageSupplier msgSupplier, final Throwable t) {
940         if (isEnabled(level, marker, msgSupplier, t)) {
941             logMessage(fqcn, level, marker, msgSupplier, t);
942         }
943     }
944 
945     @Override
946     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Object message,
947             final Throwable t) {
948         if (isEnabled(level, marker, message, t)) {
949             logMessage(fqcn, level, marker, message, t);
950         }
951     }
952 
953     @Override
954     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
955             final Throwable t) {
956         if (isEnabled(level, marker, msgSupplier, t)) {
957             logMessage(fqcn, level, marker, msgSupplier, t);
958         }
959     }
960 
961     @Override
962     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message) {
963         if (isEnabled(level, marker, message)) {
964             logMessage(fqcn, level, marker, message);
965         }
966     }
967 
968     @Override
969     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
970             final Supplier<?>... paramSuppliers) {
971         if (isEnabled(level, marker, message)) {
972             logMessage(fqcn, level, marker, message, paramSuppliers);
973         }
974     }
975 
976     @Override
977     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
978             final Object... params) {
979         if (isEnabled(level, marker, message, params)) {
980             logMessage(fqcn, level, marker, message, params);
981         }
982     }
983 
984     @Override
985     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
986             final Throwable t) {
987         if (isEnabled(level, marker, message, t)) {
988             logMessage(fqcn, level, marker, message, t);
989         }
990     }
991 
992     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
993             final Throwable t) {
994         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
995     }
996 
997     protected void logMessage(final String fqcn, final Level level, final Marker marker,
998             final MessageSupplier msgSupplier, final Throwable t) {
999         final Message message = LambdaUtil.get(msgSupplier);
1000         logMessage(fqcn, level, marker, message, t);
1001     }
1002 
1003     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1004             final Throwable t) {
1005         final Object message = LambdaUtil.get(msgSupplier);
1006         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1007     }
1008 
1009     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1010             final Throwable t) {
1011         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1012     }
1013 
1014     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message) {
1015         final Message msg = messageFactory.newMessage(message);
1016         logMessage(fqcn, level, marker, msg, msg.getThrowable());
1017     }
1018 
1019     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1020             final Object... params) {
1021         final Message msg = messageFactory.newMessage(message, params);
1022         logMessage(fqcn, level, marker, msg, msg.getThrowable());
1023     }
1024 
1025     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1026             final Supplier<?>... paramSuppliers) {
1027         final Message msg = messageFactory.newMessage(message, LambdaUtil.getAll(paramSuppliers));
1028         logMessage(fqcn, level, marker, msg, msg.getThrowable());
1029     }
1030 
1031     @Override
1032     public void printf(final Level level, final Marker marker, final String format, final Object... params) {
1033         if (isEnabled(level, marker, format, params)) {
1034             final Message msg = new StringFormattedMessage(format, params);
1035             logMessage(FQCN, level, marker, msg, msg.getThrowable());
1036         }
1037     }
1038 
1039     @Override
1040     public void printf(final Level level, final String format, final Object... params) {
1041         if (isEnabled(level, null, format, params)) {
1042             final Message msg = new StringFormattedMessage(format, params);
1043             logMessage(FQCN, level, null, msg, msg.getThrowable());
1044         }
1045     }
1046 
1047     @Override
1048     public <T extends Throwable> T throwing(final T t) {
1049         return throwing(FQCN, Level.ERROR, t);
1050     }
1051 
1052     @Override
1053     public <T extends Throwable> T throwing(final Level level, final T t) {
1054         return throwing(FQCN, level, t);
1055     }
1056 
1057     /**
1058      * Logs a Throwable to be thrown.
1059      *
1060      * @param <T> the type of the Throwable.
1061      * @param fqcn the fully qualified class name of this Logger implementation.
1062      * @param level The logging Level.
1063      * @param t The Throwable.
1064      * @return the Throwable.
1065      */
1066     protected <T extends Throwable> T throwing(final String fqcn, final Level level, final T t) {
1067         if (isEnabled(level, THROWING_MARKER, (Object) null, null)) {
1068             logMessage(fqcn, level, THROWING_MARKER, throwingMsg(t), t);
1069         }
1070         return t;
1071     }
1072 
1073     protected Message throwingMsg(final Throwable t) {
1074         return messageFactory.newMessage(THROWING);
1075     }
1076 
1077     @Override
1078     public void trace(final Marker marker, final Message msg) {
1079         logIfEnabled(FQCN, Level.TRACE, marker, msg, null);
1080     }
1081 
1082     @Override
1083     public void trace(final Marker marker, final Message msg, final Throwable t) {
1084         logIfEnabled(FQCN, Level.TRACE, marker, msg, t);
1085     }
1086 
1087     @Override
1088     public void trace(final Marker marker, final Object message) {
1089         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
1090     }
1091 
1092     @Override
1093     public void trace(final Marker marker, final Object message, final Throwable t) {
1094         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
1095     }
1096 
1097     @Override
1098     public void trace(final Marker marker, final String message) {
1099         logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null);
1100     }
1101 
1102     @Override
1103     public void trace(final Marker marker, final String message, final Object... params) {
1104         logIfEnabled(FQCN, Level.TRACE, marker, message, params);
1105     }
1106 
1107     @Override
1108     public void trace(final Marker marker, final String message, final Throwable t) {
1109         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
1110     }
1111 
1112     @Override
1113     public void trace(final Message msg) {
1114         logIfEnabled(FQCN, Level.TRACE, null, msg, null);
1115     }
1116 
1117     @Override
1118     public void trace(final Message msg, final Throwable t) {
1119         logIfEnabled(FQCN, Level.TRACE, null, msg, t);
1120     }
1121 
1122     @Override
1123     public void trace(final Object message) {
1124         logIfEnabled(FQCN, Level.TRACE, null, message, null);
1125     }
1126 
1127     @Override
1128     public void trace(final Object message, final Throwable t) {
1129         logIfEnabled(FQCN, Level.TRACE, null, message, t);
1130     }
1131 
1132     @Override
1133     public void trace(final String message) {
1134         logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null);
1135     }
1136 
1137     @Override
1138     public void trace(final String message, final Object... params) {
1139         logIfEnabled(FQCN, Level.TRACE, null, message, params);
1140     }
1141 
1142     @Override
1143     public void trace(final String message, final Throwable t) {
1144         logIfEnabled(FQCN, Level.TRACE, null, message, t);
1145     }
1146 
1147     @Override
1148     public void trace(final Supplier<?> msgSupplier) {
1149         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
1150     }
1151 
1152     @Override
1153     public void trace(final Supplier<?> msgSupplier, final Throwable t) {
1154         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
1155     }
1156 
1157     @Override
1158     public void trace(final Marker marker, final Supplier<?> msgSupplier) {
1159         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
1160     }
1161 
1162     @Override
1163     public void trace(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1164         logIfEnabled(FQCN, Level.TRACE, marker, message, paramSuppliers);
1165     }
1166 
1167     @Override
1168     public void trace(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1169         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
1170     }
1171 
1172     @Override
1173     public void trace(final String message, final Supplier<?>... paramSuppliers) {
1174         logIfEnabled(FQCN, Level.TRACE, null, message, paramSuppliers);
1175     }
1176 
1177     @Override
1178     public void trace(final Marker marker, final MessageSupplier msgSupplier) {
1179         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
1180     }
1181 
1182     @Override
1183     public void trace(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1184         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
1185     }
1186 
1187     @Override
1188     public void trace(final MessageSupplier msgSupplier) {
1189         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
1190     }
1191 
1192     @Override
1193     public void trace(final MessageSupplier msgSupplier, final Throwable t) {
1194         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
1195     }
1196 
1197     @Override
1198     public void warn(final Marker marker, final Message msg) {
1199         logIfEnabled(FQCN, Level.WARN, marker, msg, null);
1200     }
1201 
1202     @Override
1203     public void warn(final Marker marker, final Message msg, final Throwable t) {
1204         logIfEnabled(FQCN, Level.WARN, marker, msg, t);
1205     }
1206 
1207     @Override
1208     public void warn(final Marker marker, final Object message) {
1209         logIfEnabled(FQCN, Level.WARN, marker, message, null);
1210     }
1211 
1212     @Override
1213     public void warn(final Marker marker, final Object message, final Throwable t) {
1214         logIfEnabled(FQCN, Level.WARN, marker, message, t);
1215     }
1216 
1217     @Override
1218     public void warn(final Marker marker, final String message) {
1219         logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null);
1220     }
1221 
1222     @Override
1223     public void warn(final Marker marker, final String message, final Object... params) {
1224         logIfEnabled(FQCN, Level.WARN, marker, message, params);
1225     }
1226 
1227     @Override
1228     public void warn(final Marker marker, final String message, final Throwable t) {
1229         logIfEnabled(FQCN, Level.WARN, marker, message, t);
1230     }
1231 
1232     @Override
1233     public void warn(final Message msg) {
1234         logIfEnabled(FQCN, Level.WARN, null, msg, null);
1235     }
1236 
1237     @Override
1238     public void warn(final Message msg, final Throwable t) {
1239         logIfEnabled(FQCN, Level.WARN, null, msg, t);
1240     }
1241 
1242     @Override
1243     public void warn(final Object message) {
1244         logIfEnabled(FQCN, Level.WARN, null, message, null);
1245     }
1246 
1247     @Override
1248     public void warn(final Object message, final Throwable t) {
1249         logIfEnabled(FQCN, Level.WARN, null, message, t);
1250     }
1251 
1252     @Override
1253     public void warn(final String message) {
1254         logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null);
1255     }
1256 
1257     @Override
1258     public void warn(final String message, final Object... params) {
1259         logIfEnabled(FQCN, Level.WARN, null, message, params);
1260     }
1261 
1262     @Override
1263     public void warn(final String message, final Throwable t) {
1264         logIfEnabled(FQCN, Level.WARN, null, message, t);
1265     }
1266 
1267     @Override
1268     public void warn(final Supplier<?> msgSupplier) {
1269         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
1270     }
1271 
1272     @Override
1273     public void warn(final Supplier<?> msgSupplier, final Throwable t) {
1274         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
1275     }
1276 
1277     @Override
1278     public void warn(final Marker marker, final Supplier<?> msgSupplier) {
1279         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
1280     }
1281 
1282     @Override
1283     public void warn(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1284         logIfEnabled(FQCN, Level.WARN, marker, message, paramSuppliers);
1285     }
1286 
1287     @Override
1288     public void warn(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1289         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
1290     }
1291 
1292     @Override
1293     public void warn(final String message, final Supplier<?>... paramSuppliers) {
1294         logIfEnabled(FQCN, Level.WARN, null, message, paramSuppliers);
1295     }
1296 
1297     @Override
1298     public void warn(final Marker marker, final MessageSupplier msgSupplier) {
1299         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
1300     }
1301 
1302     @Override
1303     public void warn(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1304         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
1305     }
1306 
1307     @Override
1308     public void warn(final MessageSupplier msgSupplier) {
1309         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
1310     }
1311 
1312     @Override
1313     public void warn(final MessageSupplier msgSupplier, final Throwable t) {
1314         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
1315     }
1316 }