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