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.DefaultFlowMessageFactory;
25  import org.apache.logging.log4j.message.EntryMessage;
26  import org.apache.logging.log4j.message.FlowMessageFactory;
27  import org.apache.logging.log4j.message.Message;
28  import org.apache.logging.log4j.message.MessageFactory;
29  import org.apache.logging.log4j.message.MessageFactory2;
30  import org.apache.logging.log4j.message.ParameterizedMessageFactory;
31  import org.apache.logging.log4j.message.ReusableMessageFactory;
32  import org.apache.logging.log4j.message.StringFormattedMessage;
33  import org.apache.logging.log4j.status.StatusLogger;
34  import org.apache.logging.log4j.util.LambdaUtil;
35  import org.apache.logging.log4j.util.LoaderUtil;
36  import org.apache.logging.log4j.util.MessageSupplier;
37  import org.apache.logging.log4j.util.PropertiesUtil;
38  import org.apache.logging.log4j.util.Strings;
39  import org.apache.logging.log4j.util.Supplier;
40  
41  /**
42   * Base implementation of a Logger. It is highly recommended that any Logger implementation extend this class.
43   */
44  public abstract class AbstractLogger implements ExtendedLogger, Serializable {
45  
46      /**
47       * Marker for flow tracing.
48       */
49      public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW");
50  
51      /**
52       * Marker for method entry tracing.
53       */
54      public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTER").setParents(FLOW_MARKER);
55  
56      /**
57       * Marker for method exit tracing.
58       */
59      public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER);
60  
61      /**
62       * Marker for exception tracing.
63       */
64      public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION");
65  
66      /**
67       * Marker for throwing exceptions.
68       */
69      public static final Marker THROWING_MARKER = MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER);
70  
71      /**
72       * Marker for catching exceptions.
73       */
74      public static final Marker CATCHING_MARKER = MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER);
75  
76      /**
77       * The default MessageFactory class.
78       */
79      public static final Class<? extends MessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS =
80              createClassForProperty("log4j2.messageFactory", ReusableMessageFactory.class,
81                      ParameterizedMessageFactory.class);
82  
83      /**
84       * The default FlowMessageFactory class.
85       */
86      public static final Class<? extends FlowMessageFactory> DEFAULT_FLOW_MESSAGE_FACTORY_CLASS =
87              createFlowClassForProperty("log4j2.flowMessageFactory", DefaultFlowMessageFactory.class);
88  
89      private static final long serialVersionUID = 2L;
90  
91      private static final String FQCN = AbstractLogger.class.getName();
92      private static final String THROWING = "Throwing";
93      private static final String CATCHING = "Catching";
94  
95      protected final String name;
96      private final MessageFactory2 messageFactory;
97      private final FlowMessageFactory flowMessageFactory;
98  
99      /**
100      * Creates a new logger named after this class (or subclass).
101      */
102     public AbstractLogger() {
103         this.name = getClass().getName();
104         this.messageFactory = createDefaultMessageFactory();
105         this.flowMessageFactory = createDefaultFlowMessageFactory();
106     }
107 
108     /**
109      * Creates a new named logger.
110      *
111      * @param name the logger name
112      */
113     public AbstractLogger(final String name) {
114         this(name, createDefaultMessageFactory());
115     }
116 
117     /**
118      * Creates a new named logger with a particular {@link MessageFactory}.
119      *
120      * @param name the logger name
121      * @param messageFactory the message factory, if null then use the default message factory.
122      */
123     public AbstractLogger(final String name, final MessageFactory messageFactory) {
124         this.name = name;
125         this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : narrow(messageFactory);
126         this.flowMessageFactory = createDefaultFlowMessageFactory();
127     }
128 
129     /**
130      * Checks that the message factory a logger was created with is the same as the given messageFactory. If they are
131      * different log a warning to the {@linkplain StatusLogger}. A null MessageFactory translates to the default
132      * MessageFactory {@link #DEFAULT_MESSAGE_FACTORY_CLASS}.
133      *
134      * @param logger The logger to check
135      * @param messageFactory The message factory to check.
136      */
137     public static void checkMessageFactory(final ExtendedLogger logger, final MessageFactory messageFactory) {
138         final String name = logger.getName();
139         final MessageFactory loggerMessageFactory = logger.getMessageFactory();
140         if (messageFactory != null && !loggerMessageFactory.equals(messageFactory)) {
141             StatusLogger.getLogger().warn(
142                     "The Logger {} was created with the message factory {} and is now requested with the "
143                             + "message factory {}, which may create log events with unexpected formatting.", name,
144                     loggerMessageFactory, messageFactory);
145         } else if (messageFactory == null && !loggerMessageFactory.getClass().equals(DEFAULT_MESSAGE_FACTORY_CLASS)) {
146             StatusLogger
147                     .getLogger()
148                     .warn("The Logger {} was created with the message factory {} and is now requested with a null "
149                             + "message factory (defaults to {}), which may create log events with unexpected "
150                             + "formatting.",
151                             name, loggerMessageFactory, DEFAULT_MESSAGE_FACTORY_CLASS.getName());
152         }
153     }
154 
155     @Override
156     public void catching(final Level level, final Throwable t) {
157         catching(FQCN, level, t);
158     }
159 
160     /**
161      * Logs a Throwable that has been caught with location information.
162      *
163      * @param fqcn The fully qualified class name of the <b>caller</b>.
164      * @param level The logging level.
165      * @param t The Throwable.
166      */
167     protected void catching(final String fqcn, final Level level, final Throwable t) {
168         if (isEnabled(level, CATCHING_MARKER, (Object) null, null)) {
169             logMessage(fqcn, level, CATCHING_MARKER, catchingMsg(t), t);
170         }
171     }
172 
173     @Override
174     public void catching(final Throwable t) {
175         if (isEnabled(Level.ERROR, CATCHING_MARKER, (Object) null, null)) {
176             logMessage(FQCN, Level.ERROR, CATCHING_MARKER, catchingMsg(t), t);
177         }
178     }
179 
180     protected Message catchingMsg(final Throwable t) {
181         return messageFactory.newMessage(CATCHING);
182     }
183 
184     private static Class<? extends MessageFactory> createClassForProperty(final String property,
185             final Class<ReusableMessageFactory> reusableParameterizedMessageFactoryClass,
186             final Class<ParameterizedMessageFactory> parameterizedMessageFactoryClass) {
187         try {
188             final boolean IS_WEB_APP = PropertiesUtil.getProperties().getBooleanProperty(
189                     "log4j2.is.webapp", isClassAvailable("javax.servlet.Servlet"));
190             final boolean ENABLE_THREADLOCALS = !IS_WEB_APP && PropertiesUtil.getProperties().getBooleanProperty(
191                     "log4j2.enable.threadlocals", true);
192             final String fallback = ENABLE_THREADLOCALS ? reusableParameterizedMessageFactoryClass.getName()
193                     : parameterizedMessageFactoryClass.getName();
194             final String clsName = PropertiesUtil.getProperties().getStringProperty(property, fallback);
195             return LoaderUtil.loadClass(clsName).asSubclass(MessageFactory.class);
196         } catch (final Throwable t) {
197             return parameterizedMessageFactoryClass;
198         }
199     }
200 
201     /**
202      * Determines if a named Class can be loaded or not.
203      *
204      * @param className The class name.
205      * @return {@code true} if the class could be found or {@code false} otherwise.
206      */
207     private static boolean isClassAvailable(final String className) {
208         try {
209             return LoaderUtil.loadClass(className) != null;
210         } catch (final Throwable e) {
211             return false;
212         }
213     }
214 
215     private static Class<? extends FlowMessageFactory> createFlowClassForProperty(final String property,
216             final Class<DefaultFlowMessageFactory> defaultFlowMessageFactoryClass) {
217         try {
218             final String clsName = PropertiesUtil.getProperties().getStringProperty(property, defaultFlowMessageFactoryClass.getName());
219             return LoaderUtil.loadClass(clsName).asSubclass(FlowMessageFactory.class);
220         } catch (final Throwable t) {
221             return defaultFlowMessageFactoryClass;
222         }
223     }
224 
225     private static MessageFactory2 createDefaultMessageFactory() {
226         try {
227             final MessageFactory result = DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
228             return narrow(result);
229         } catch (final InstantiationException | IllegalAccessException e) {
230             throw new IllegalStateException(e);
231         }
232     }
233 
234     private static MessageFactory2 narrow(final MessageFactory result) {
235         if (result instanceof MessageFactory2) {
236             return (MessageFactory2) result;
237         }
238         return new MessageFactory2Adapter(result);
239     }
240 
241     private static FlowMessageFactory createDefaultFlowMessageFactory() {
242         try {
243             return DEFAULT_FLOW_MESSAGE_FACTORY_CLASS.newInstance();
244         } catch (final InstantiationException | IllegalAccessException e) {
245             throw new IllegalStateException(e);
246         }
247     }
248 
249     @Override
250     public void debug(final Marker marker, final CharSequence message) {
251         logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
252     }
253 
254     @Override
255     public void debug(final Marker marker, final CharSequence message, final Throwable t) {
256         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
257     }
258 
259     @Override
260     public void debug(final Marker marker, final Message msg) {
261         logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
262     }
263 
264     @Override
265     public void debug(final Marker marker, final Message msg, final Throwable t) {
266         logIfEnabled(FQCN, Level.DEBUG, marker, msg, t);
267     }
268 
269     @Override
270     public void debug(final Marker marker, final Object message) {
271         logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
272     }
273 
274     @Override
275     public void debug(final Marker marker, final Object message, final Throwable t) {
276         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
277     }
278 
279     @Override
280     public void debug(final Marker marker, final String message) {
281         logIfEnabled(FQCN, Level.DEBUG, marker, message, (Throwable) null);
282     }
283 
284     @Override
285     public void debug(final Marker marker, final String message, final Object... params) {
286         logIfEnabled(FQCN, Level.DEBUG, marker, message, params);
287     }
288 
289     @Override
290     public void debug(final Marker marker, final String message, final Throwable t) {
291         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
292     }
293 
294     @Override
295     public void debug(final Message msg) {
296         logIfEnabled(FQCN, Level.DEBUG, null, msg, null);
297     }
298 
299     @Override
300     public void debug(final Message msg, final Throwable t) {
301         logIfEnabled(FQCN, Level.DEBUG, null, msg, t);
302     }
303 
304     @Override
305     public void debug(final CharSequence message) {
306         logIfEnabled(FQCN, Level.DEBUG, null, message, null);
307     }
308 
309     @Override
310     public void debug(final CharSequence message, final Throwable t) {
311         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
312     }
313 
314     @Override
315     public void debug(final Object message) {
316         logIfEnabled(FQCN, Level.DEBUG, null, message, null);
317     }
318 
319     @Override
320     public void debug(final Object message, final Throwable t) {
321         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
322     }
323 
324     @Override
325     public void debug(final String message) {
326         logIfEnabled(FQCN, Level.DEBUG, null, message, (Throwable) null);
327     }
328 
329     @Override
330     public void debug(final String message, final Object... params) {
331         logIfEnabled(FQCN, Level.DEBUG, null, message, params);
332     }
333 
334     @Override
335     public void debug(final String message, final Throwable t) {
336         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
337     }
338 
339     @Override
340     public void debug(final Supplier<?> msgSupplier) {
341         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
342     }
343 
344     @Override
345     public void debug(final Supplier<?> msgSupplier, final Throwable t) {
346         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
347     }
348 
349     @Override
350     public void debug(final Marker marker, final Supplier<?> msgSupplier) {
351         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
352     }
353 
354     @Override
355     public void debug(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
356         logIfEnabled(FQCN, Level.DEBUG, marker, message, paramSuppliers);
357     }
358 
359     @Override
360     public void debug(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
361         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
362     }
363 
364     @Override
365     public void debug(final String message, final Supplier<?>... paramSuppliers) {
366         logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers);
367     }
368 
369     @Override
370     public void debug(final Marker marker, final MessageSupplier msgSupplier) {
371         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
372     }
373 
374     @Override
375     public void debug(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
376         logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
377     }
378 
379     @Override
380     public void debug(final MessageSupplier msgSupplier) {
381         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
382     }
383 
384     @Override
385     public void debug(final MessageSupplier msgSupplier, final Throwable t) {
386         logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
387     }
388 
389     @Override
390     public void debug(final Marker marker, final String message, final Object p0) {
391         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0);
392     }
393 
394     @Override
395     public void debug(final Marker marker, final String message, final Object p0, final Object p1) {
396         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1);
397     }
398 
399     @Override
400     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
401         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2);
402     }
403 
404     @Override
405     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
406             final Object p3) {
407         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3);
408     }
409 
410     @Override
411     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
412             final Object p3, final Object p4) {
413         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4);
414     }
415 
416     @Override
417     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
418             final Object p3, final Object p4, final Object p5) {
419         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5);
420     }
421 
422     @Override
423     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
424             final Object p3, final Object p4, final Object p5,
425             final Object p6) {
426         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6);
427     }
428 
429     @Override
430     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
431             final Object p3, final Object p4, final Object p5,
432             final Object p6, final Object p7) {
433         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
434     }
435 
436     @Override
437     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
438             final Object p3, final Object p4, final Object p5,
439             final Object p6, final Object p7, final Object p8) {
440         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
441     }
442 
443     @Override
444     public void debug(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
445             final Object p3, final Object p4, final Object p5,
446             final Object p6, final Object p7, final Object p8, final Object p9) {
447         logIfEnabled(FQCN, Level.DEBUG, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
448     }
449 
450     @Override
451     public void debug(final String message, final Object p0) {
452         logIfEnabled(FQCN, Level.DEBUG, null, message, p0);
453     }
454 
455     @Override
456     public void debug(final String message, final Object p0, final Object p1) {
457         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1);
458     }
459 
460     @Override
461     public void debug(final String message, final Object p0, final Object p1, final Object p2) {
462         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2);
463     }
464 
465     @Override
466     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
467         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3);
468     }
469 
470     @Override
471     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
472             final Object p4) {
473         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4);
474     }
475 
476     @Override
477     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
478             final Object p4, final Object p5) {
479         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5);
480     }
481 
482     @Override
483     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
484             final Object p4, final Object p5, final Object p6) {
485         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6);
486     }
487 
488     @Override
489     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
490             final Object p4, final Object p5, final Object p6,
491             final Object p7) {
492         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
493     }
494 
495     @Override
496     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
497             final Object p4, final Object p5, final Object p6,
498             final Object p7, final Object p8) {
499         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
500     }
501 
502     @Override
503     public void debug(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
504             final Object p4, final Object p5, final Object p6,
505             final Object p7, final Object p8, final Object p9) {
506         logIfEnabled(FQCN, Level.DEBUG, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
507     }
508 
509     /**
510      * Logs entry to a method with location information.
511      *
512      * @param fqcn The fully qualified class name of the <b>caller</b>.
513      * @param format Format String for the parameters.
514      * @param paramSuppliers The Suppliers of the parameters.
515      */
516     protected EntryMessage enter(final String fqcn, final String format, final Supplier<?>... paramSuppliers) {
517         EntryMessage entryMsg = null;
518         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
519             logMessage(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg = entryMsg(format, paramSuppliers), null);
520         }
521         return entryMsg;
522     }
523 
524     /**
525      * Logs entry to a method with location information.
526      *
527      * @param fqcn The fully qualified class name of the <b>caller</b>.
528      * @param format The format String for the parameters.
529      * @param paramSuppliers The parameters to the method.
530      */
531     @Deprecated
532     protected EntryMessage enter(final String fqcn, final String format, final MessageSupplier... paramSuppliers) {
533         EntryMessage entryMsg = null;
534         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
535             logMessage(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg = entryMsg(format, paramSuppliers), null);
536         }
537         return entryMsg;
538     }
539 
540     /**
541      * Logs entry to a method with location information.
542      *
543      * @param fqcn The fully qualified class name of the <b>caller</b>.
544      * @param format The format String for the parameters.
545      * @param params The parameters to the method.
546      */
547     protected EntryMessage enter(final String fqcn, final String format, final Object... params) {
548         EntryMessage entryMsg = null;
549         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
550             logMessage(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg = entryMsg(format, params), null);
551         }
552         return entryMsg;
553     }
554 
555     /**
556      * Logs entry to a method with location information.
557      *
558      * @param fqcn The fully qualified class name of the <b>caller</b>.
559      * @param msgSupplier The Supplier of the Message.
560      */
561     @Deprecated
562     protected EntryMessage enter(final String fqcn, final MessageSupplier msgSupplier) {
563         EntryMessage message = null;
564         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
565             logMessage(fqcn, Level.TRACE, ENTRY_MARKER, message = flowMessageFactory.newEntryMessage(
566                     msgSupplier.get()), null);
567         }
568         return message;
569     }
570 
571     /**
572      * Logs entry to a method with location information.
573      *
574      * @param fqcn
575      *            The fully qualified class name of the <b>caller</b>.
576      * @param message
577      *            the Message.
578      * @since 2.6
579      */
580     protected EntryMessage enter(final String fqcn, final Message message) {
581         EntryMessage flowMessage = null;
582         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
583             logMessage(fqcn, Level.TRACE, ENTRY_MARKER, flowMessage = flowMessageFactory.newEntryMessage(message),
584                     null);
585         }
586         return flowMessage;
587     }
588 
589     @Override
590     public void entry() {
591         entry(FQCN, (Object[]) null);
592     }
593 
594     @Override
595     public void entry(final Object... params) {
596         entry(FQCN, params);
597     }
598 
599     /**
600      * Logs entry to a method with location information.
601      *
602      * @param fqcn The fully qualified class name of the <b>caller</b>.
603      * @param params The parameters to the method.
604      */
605     protected void entry(final String fqcn, final Object... params) {
606         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
607             if (params == null) {
608                 logMessage(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(null, (Supplier<?>[]) null), null);
609             } else {
610                 logMessage(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(null, params), null);
611             }
612         }
613     }
614 
615     protected EntryMessage entryMsg(final String format, final Object... params) {
616         final int count = params == null ? 0 : params.length;
617         if (count == 0) {
618             if (Strings.isEmpty(format)) {
619                 return flowMessageFactory.newEntryMessage(null);
620             }
621             return flowMessageFactory.newEntryMessage(messageFactory.newMessage(format));
622         }
623         if (format != null) {
624             return flowMessageFactory.newEntryMessage(messageFactory.newMessage(format, params));
625         }
626         final StringBuilder sb = new StringBuilder();
627         sb.append("params(");
628         for (int i = 0; i < count; i++) {
629             if (i > 0) {
630                 sb.append(", ");
631             }
632             final Object parm = params[i];
633             sb.append(parm instanceof Message ? ((Message) parm).getFormattedMessage() : String.valueOf(parm));
634         }
635         sb.append(')');
636         return flowMessageFactory.newEntryMessage(messageFactory.newMessage(sb.toString()));
637     }
638 
639     protected EntryMessage entryMsg(final String format, final MessageSupplier... paramSuppliers) {
640         final int count = paramSuppliers == null ? 0 : paramSuppliers.length;
641         final Object[] params = new Object[count];
642         for (int i = 0; i < count; i++) {
643             params[i] = paramSuppliers[i].get();
644             params[i] = params[i] != null ? ((Message) params[i]).getFormattedMessage() : null;
645         }
646         return entryMsg(format, params);
647     }
648 
649     protected EntryMessage entryMsg(final String format, final Supplier<?>... paramSuppliers) {
650         final int count = paramSuppliers == null ? 0 : paramSuppliers.length;
651         final Object[] params = new Object[count];
652         for (int i = 0; i < count; i++) {
653             params[i] = paramSuppliers[i].get();
654             if (params[i] instanceof Message) {
655                 params[i] = ((Message) params[i]).getFormattedMessage();
656             }
657         }
658         return entryMsg(format, params);
659     }
660 
661     @Override
662     public void error(final Marker marker, final Message msg) {
663         logIfEnabled(FQCN, Level.ERROR, marker, msg, null);
664     }
665 
666     @Override
667     public void error(final Marker marker, final Message msg, final Throwable t) {
668         logIfEnabled(FQCN, Level.ERROR, marker, msg, t);
669     }
670 
671     @Override
672     public void error(final Marker marker, final CharSequence message) {
673         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
674     }
675 
676     @Override
677     public void error(final Marker marker, final CharSequence message, final Throwable t) {
678         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
679     }
680 
681     @Override
682     public void error(final Marker marker, final Object message) {
683         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
684     }
685 
686     @Override
687     public void error(final Marker marker, final Object message, final Throwable t) {
688         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
689     }
690 
691     @Override
692     public void error(final Marker marker, final String message) {
693         logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null);
694     }
695 
696     @Override
697     public void error(final Marker marker, final String message, final Object... params) {
698         logIfEnabled(FQCN, Level.ERROR, marker, message, params);
699     }
700 
701     @Override
702     public void error(final Marker marker, final String message, final Throwable t) {
703         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
704     }
705 
706     @Override
707     public void error(final Message msg) {
708         logIfEnabled(FQCN, Level.ERROR, null, msg, null);
709     }
710 
711     @Override
712     public void error(final Message msg, final Throwable t) {
713         logIfEnabled(FQCN, Level.ERROR, null, msg, t);
714     }
715 
716     @Override
717     public void error(final CharSequence message) {
718         logIfEnabled(FQCN, Level.ERROR, null, message, null);
719     }
720 
721     @Override
722     public void error(final CharSequence message, final Throwable t) {
723         logIfEnabled(FQCN, Level.ERROR, null, message, t);
724     }
725 
726     @Override
727     public void error(final Object message) {
728         logIfEnabled(FQCN, Level.ERROR, null, message, null);
729     }
730 
731     @Override
732     public void error(final Object message, final Throwable t) {
733         logIfEnabled(FQCN, Level.ERROR, null, message, t);
734     }
735 
736     @Override
737     public void error(final String message) {
738         logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null);
739     }
740 
741     @Override
742     public void error(final String message, final Object... params) {
743         logIfEnabled(FQCN, Level.ERROR, null, message, params);
744     }
745 
746     @Override
747     public void error(final String message, final Throwable t) {
748         logIfEnabled(FQCN, Level.ERROR, null, message, t);
749     }
750 
751     @Override
752     public void error(final Supplier<?> msgSupplier) {
753         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
754     }
755 
756     @Override
757     public void error(final Supplier<?> msgSupplier, final Throwable t) {
758         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
759     }
760 
761     @Override
762     public void error(final Marker marker, final Supplier<?> msgSupplier) {
763         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
764     }
765 
766     @Override
767     public void error(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
768         logIfEnabled(FQCN, Level.ERROR, marker, message, paramSuppliers);
769     }
770 
771     @Override
772     public void error(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
773         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
774     }
775 
776     @Override
777     public void error(final String message, final Supplier<?>... paramSuppliers) {
778         logIfEnabled(FQCN, Level.ERROR, null, message, paramSuppliers);
779     }
780 
781     @Override
782     public void error(final Marker marker, final MessageSupplier msgSupplier) {
783         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
784     }
785 
786     @Override
787     public void error(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
788         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
789     }
790 
791     @Override
792     public void error(final MessageSupplier msgSupplier) {
793         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
794     }
795 
796     @Override
797     public void error(final MessageSupplier msgSupplier, final Throwable t) {
798         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
799     }
800 
801     @Override
802     public void error(final Marker marker, final String message, final Object p0) {
803         logIfEnabled(FQCN, Level.ERROR, marker, message, p0);
804     }
805 
806     @Override
807     public void error(final Marker marker, final String message, final Object p0, final Object p1) {
808         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1);
809     }
810 
811     @Override
812     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
813         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2);
814     }
815 
816     @Override
817     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
818             final Object p3) {
819         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3);
820     }
821 
822     @Override
823     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
824             final Object p3, final Object p4) {
825         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4);
826     }
827 
828     @Override
829     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
830             final Object p3, final Object p4, final Object p5) {
831         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5);
832     }
833 
834     @Override
835     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
836             final Object p3, final Object p4, final Object p5,
837             final Object p6) {
838         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6);
839     }
840 
841     @Override
842     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
843             final Object p3, final Object p4, final Object p5,
844             final Object p6, final Object p7) {
845         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
846     }
847 
848     @Override
849     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
850             final Object p3, final Object p4, final Object p5,
851             final Object p6, final Object p7, final Object p8) {
852         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
853     }
854 
855     @Override
856     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
857             final Object p3, final Object p4, final Object p5,
858             final Object p6, final Object p7, final Object p8, final Object p9) {
859         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
860     }
861 
862     @Override
863     public void error(final String message, final Object p0) {
864         logIfEnabled(FQCN, Level.ERROR, null, message, p0);
865     }
866 
867     @Override
868     public void error(final String message, final Object p0, final Object p1) {
869         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1);
870     }
871 
872     @Override
873     public void error(final String message, final Object p0, final Object p1, final Object p2) {
874         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2);
875     }
876 
877     @Override
878     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
879         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3);
880     }
881 
882     @Override
883     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
884             final Object p4) {
885         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4);
886     }
887 
888     @Override
889     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
890             final Object p4, final Object p5) {
891         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5);
892     }
893 
894     @Override
895     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
896             final Object p4, final Object p5, final Object p6) {
897         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6);
898     }
899 
900     @Override
901     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
902             final Object p4, final Object p5, final Object p6, final Object p7) {
903         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
904     }
905 
906     @Override
907     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
908             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
909         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
910     }
911 
912     @Override
913     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
914             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
915         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
916     }
917 
918     @Override
919     public void exit() {
920         exit(FQCN, (Object) null);
921     }
922 
923     @Override
924     public <R> R exit(final R result) {
925         return exit(FQCN, result);
926     }
927 
928     /**
929      * Logs exiting from a method with the result and location information.
930      *
931      * @param fqcn The fully qualified class name of the <b>caller</b>.
932      * @param <R> The type of the parameter and object being returned.
933      * @param result The result being returned from the method call.
934      * @return the return value passed to this method.
935      */
936     protected <R> R exit(final String fqcn, final R result) {
937         logIfEnabled(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(null, result), null);
938         return result;
939     }
940 
941     /**
942      * Logs exiting from a method with the result and location information.
943      *
944      * @param fqcn The fully qualified class name of the <b>caller</b>.
945      * @param <R> The type of the parameter and object being returned.
946      * @param result The result being returned from the method call.
947      * @return the return value passed to this method.
948      */
949     protected <R> R exit(final String fqcn, final String format, final R result) {
950         logIfEnabled(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(format, result), null);
951         return result;
952     }
953 
954     protected Message exitMsg(final String format, final Object result) {
955         if (result == null) {
956             if (format == null) {
957                 return messageFactory.newMessage("Exit");
958             }
959             return messageFactory.newMessage("Exit: " + format);
960         }
961         if (format == null) {
962             return messageFactory.newMessage("Exit with(" + result + ')');
963         }
964         return messageFactory.newMessage("Exit: " + format, result);
965 
966     }
967 
968     @Override
969     public void fatal(final Marker marker, final Message msg) {
970         logIfEnabled(FQCN, Level.FATAL, marker, msg, null);
971     }
972 
973     @Override
974     public void fatal(final Marker marker, final Message msg, final Throwable t) {
975         logIfEnabled(FQCN, Level.FATAL, marker, msg, t);
976     }
977 
978     @Override
979     public void fatal(final Marker marker, final CharSequence message) {
980         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
981     }
982 
983     @Override
984     public void fatal(final Marker marker, final CharSequence message, final Throwable t) {
985         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
986     }
987 
988     @Override
989     public void fatal(final Marker marker, final Object message) {
990         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
991     }
992 
993     @Override
994     public void fatal(final Marker marker, final Object message, final Throwable t) {
995         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
996     }
997 
998     @Override
999     public void fatal(final Marker marker, final String message) {
1000         logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null);
1001     }
1002 
1003     @Override
1004     public void fatal(final Marker marker, final String message, final Object... params) {
1005         logIfEnabled(FQCN, Level.FATAL, marker, message, params);
1006     }
1007 
1008     @Override
1009     public void fatal(final Marker marker, final String message, final Throwable t) {
1010         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
1011     }
1012 
1013     @Override
1014     public void fatal(final Message msg) {
1015         logIfEnabled(FQCN, Level.FATAL, null, msg, null);
1016     }
1017 
1018     @Override
1019     public void fatal(final Message msg, final Throwable t) {
1020         logIfEnabled(FQCN, Level.FATAL, null, msg, t);
1021     }
1022 
1023     @Override
1024     public void fatal(final CharSequence message) {
1025         logIfEnabled(FQCN, Level.FATAL, null, message, null);
1026     }
1027 
1028     @Override
1029     public void fatal(final CharSequence message, final Throwable t) {
1030         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1031     }
1032 
1033     @Override
1034     public void fatal(final Object message) {
1035         logIfEnabled(FQCN, Level.FATAL, null, message, null);
1036     }
1037 
1038     @Override
1039     public void fatal(final Object message, final Throwable t) {
1040         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1041     }
1042 
1043     @Override
1044     public void fatal(final String message) {
1045         logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null);
1046     }
1047 
1048     @Override
1049     public void fatal(final String message, final Object... params) {
1050         logIfEnabled(FQCN, Level.FATAL, null, message, params);
1051     }
1052 
1053     @Override
1054     public void fatal(final String message, final Throwable t) {
1055         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1056     }
1057 
1058     @Override
1059     public void fatal(final Supplier<?> msgSupplier) {
1060         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
1061     }
1062 
1063     @Override
1064     public void fatal(final Supplier<?> msgSupplier, final Throwable t) {
1065         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
1066     }
1067 
1068     @Override
1069     public void fatal(final Marker marker, final Supplier<?> msgSupplier) {
1070         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
1071     }
1072 
1073     @Override
1074     public void fatal(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1075         logIfEnabled(FQCN, Level.FATAL, marker, message, paramSuppliers);
1076     }
1077 
1078     @Override
1079     public void fatal(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1080         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
1081     }
1082 
1083     @Override
1084     public void fatal(final String message, final Supplier<?>... paramSuppliers) {
1085         logIfEnabled(FQCN, Level.FATAL, null, message, paramSuppliers);
1086     }
1087 
1088     @Override
1089     public void fatal(final Marker marker, final MessageSupplier msgSupplier) {
1090         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
1091     }
1092 
1093     @Override
1094     public void fatal(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1095         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
1096     }
1097 
1098     @Override
1099     public void fatal(final MessageSupplier msgSupplier) {
1100         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
1101     }
1102 
1103     @Override
1104     public void fatal(final MessageSupplier msgSupplier, final Throwable t) {
1105         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
1106     }
1107 
1108     @Override
1109     public void fatal(final Marker marker, final String message, final Object p0) {
1110         logIfEnabled(FQCN, Level.FATAL, marker, message, p0);
1111     }
1112 
1113     @Override
1114     public void fatal(final Marker marker, final String message, final Object p0, final Object p1) {
1115         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1);
1116     }
1117 
1118     @Override
1119     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
1120         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2);
1121     }
1122 
1123     @Override
1124     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1125             final Object p3) {
1126         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3);
1127     }
1128 
1129     @Override
1130     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1131             final Object p3, final Object p4) {
1132         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4);
1133     }
1134 
1135     @Override
1136     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1137             final Object p3, final Object p4, final Object p5) {
1138         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5);
1139     }
1140 
1141     @Override
1142     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1143             final Object p3, final Object p4, final Object p5, final Object p6) {
1144         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6);
1145     }
1146 
1147     @Override
1148     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1149             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
1150         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1151     }
1152 
1153     @Override
1154     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1155             final Object p3, final Object p4, final Object p5,
1156             final Object p6, final Object p7, final Object p8) {
1157         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1158     }
1159 
1160     @Override
1161     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1162             final Object p3, final Object p4, final Object p5,
1163             final Object p6, final Object p7, final Object p8, final Object p9) {
1164         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1165     }
1166 
1167     @Override
1168     public void fatal(final String message, final Object p0) {
1169         logIfEnabled(FQCN, Level.FATAL, null, message, p0);
1170     }
1171 
1172     @Override
1173     public void fatal(final String message, final Object p0, final Object p1) {
1174         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1);
1175     }
1176 
1177     @Override
1178     public void fatal(final String message, final Object p0, final Object p1, final Object p2) {
1179         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2);
1180     }
1181 
1182     @Override
1183     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1184         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3);
1185     }
1186 
1187     @Override
1188     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1189             final Object p4) {
1190         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4);
1191     }
1192 
1193     @Override
1194     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1195             final Object p4, final Object p5) {
1196         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5);
1197     }
1198 
1199     @Override
1200     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1201             final Object p4, final Object p5, final Object p6) {
1202         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6);
1203     }
1204 
1205     @Override
1206     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1207             final Object p4, final Object p5, final Object p6, final Object p7) {
1208         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1209     }
1210 
1211     @Override
1212     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1213             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
1214         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1215     }
1216 
1217     @Override
1218     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1219             final Object p4, final Object p5, final Object p6,
1220             final Object p7, final Object p8, final Object p9) {
1221         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1222     }
1223 
1224     @Override
1225     public MessageFactory getMessageFactory() {
1226         return messageFactory;
1227     }
1228 
1229     @Override
1230     public String getName() {
1231         return name;
1232     }
1233 
1234     @Override
1235     public void info(final Marker marker, final Message msg) {
1236         logIfEnabled(FQCN, Level.INFO, marker, msg, null);
1237     }
1238 
1239     @Override
1240     public void info(final Marker marker, final Message msg, final Throwable t) {
1241         logIfEnabled(FQCN, Level.INFO, marker, msg, t);
1242     }
1243 
1244     @Override
1245     public void info(final Marker marker, final CharSequence message) {
1246         logIfEnabled(FQCN, Level.INFO, marker, message, null);
1247     }
1248 
1249     @Override
1250     public void info(final Marker marker, final CharSequence message, final Throwable t) {
1251         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1252     }
1253 
1254     @Override
1255     public void info(final Marker marker, final Object message) {
1256         logIfEnabled(FQCN, Level.INFO, marker, message, null);
1257     }
1258 
1259     @Override
1260     public void info(final Marker marker, final Object message, final Throwable t) {
1261         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1262     }
1263 
1264     @Override
1265     public void info(final Marker marker, final String message) {
1266         logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null);
1267     }
1268 
1269     @Override
1270     public void info(final Marker marker, final String message, final Object... params) {
1271         logIfEnabled(FQCN, Level.INFO, marker, message, params);
1272     }
1273 
1274     @Override
1275     public void info(final Marker marker, final String message, final Throwable t) {
1276         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1277     }
1278 
1279     @Override
1280     public void info(final Message msg) {
1281         logIfEnabled(FQCN, Level.INFO, null, msg, null);
1282     }
1283 
1284     @Override
1285     public void info(final Message msg, final Throwable t) {
1286         logIfEnabled(FQCN, Level.INFO, null, msg, t);
1287     }
1288 
1289     @Override
1290     public void info(final CharSequence message) {
1291         logIfEnabled(FQCN, Level.INFO, null, message, null);
1292     }
1293 
1294     @Override
1295     public void info(final CharSequence message, final Throwable t) {
1296         logIfEnabled(FQCN, Level.INFO, null, message, t);
1297     }
1298 
1299     @Override
1300     public void info(final Object message) {
1301         logIfEnabled(FQCN, Level.INFO, null, message, null);
1302     }
1303 
1304     @Override
1305     public void info(final Object message, final Throwable t) {
1306         logIfEnabled(FQCN, Level.INFO, null, message, t);
1307     }
1308 
1309     @Override
1310     public void info(final String message) {
1311         logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
1312     }
1313 
1314     @Override
1315     public void info(final String message, final Object... params) {
1316         logIfEnabled(FQCN, Level.INFO, null, message, params);
1317     }
1318 
1319     @Override
1320     public void info(final String message, final Throwable t) {
1321         logIfEnabled(FQCN, Level.INFO, null, message, t);
1322     }
1323 
1324     @Override
1325     public void info(final Supplier<?> msgSupplier) {
1326         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
1327     }
1328 
1329     @Override
1330     public void info(final Supplier<?> msgSupplier, final Throwable t) {
1331         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
1332     }
1333 
1334     @Override
1335     public void info(final Marker marker, final Supplier<?> msgSupplier) {
1336         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
1337     }
1338 
1339     @Override
1340     public void info(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1341         logIfEnabled(FQCN, Level.INFO, marker, message, paramSuppliers);
1342     }
1343 
1344     @Override
1345     public void info(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1346         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
1347     }
1348 
1349     @Override
1350     public void info(final String message, final Supplier<?>... paramSuppliers) {
1351         logIfEnabled(FQCN, Level.INFO, null, message, paramSuppliers);
1352     }
1353 
1354     @Override
1355     public void info(final Marker marker, final MessageSupplier msgSupplier) {
1356         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
1357     }
1358 
1359     @Override
1360     public void info(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1361         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
1362     }
1363 
1364     @Override
1365     public void info(final MessageSupplier msgSupplier) {
1366         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
1367     }
1368 
1369     @Override
1370     public void info(final MessageSupplier msgSupplier, final Throwable t) {
1371         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
1372     }
1373 
1374     @Override
1375     public void info(final Marker marker, final String message, final Object p0) {
1376         logIfEnabled(FQCN, Level.INFO, marker, message, p0);
1377     }
1378 
1379     @Override
1380     public void info(final Marker marker, final String message, final Object p0, final Object p1) {
1381         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1);
1382     }
1383 
1384     @Override
1385     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
1386         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2);
1387     }
1388 
1389     @Override
1390     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1391             final Object p3) {
1392         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3);
1393     }
1394 
1395     @Override
1396     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1397             final Object p3, final Object p4) {
1398         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4);
1399     }
1400 
1401     @Override
1402     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1403             final Object p3, final Object p4, final Object p5) {
1404         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5);
1405     }
1406 
1407     @Override
1408     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1409             final Object p3, final Object p4, final Object p5, final Object p6) {
1410         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6);
1411     }
1412 
1413     @Override
1414     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1415             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
1416         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1417     }
1418 
1419     @Override
1420     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1421             final Object p3, final Object p4, final Object p5,
1422             final Object p6, final Object p7, final Object p8) {
1423         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1424     }
1425 
1426     @Override
1427     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1428             final Object p3, final Object p4, final Object p5,
1429             final Object p6, final Object p7, final Object p8, final Object p9) {
1430         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1431     }
1432 
1433     @Override
1434     public void info(final String message, final Object p0) {
1435         logIfEnabled(FQCN, Level.INFO, null, message, p0);
1436     }
1437 
1438     @Override
1439     public void info(final String message, final Object p0, final Object p1) {
1440         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1);
1441     }
1442 
1443     @Override
1444     public void info(final String message, final Object p0, final Object p1, final Object p2) {
1445         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2);
1446     }
1447 
1448     @Override
1449     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1450         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3);
1451     }
1452 
1453     @Override
1454     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1455             final Object p4) {
1456         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4);
1457     }
1458 
1459     @Override
1460     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1461             final Object p4, final Object p5) {
1462         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5);
1463     }
1464 
1465     @Override
1466     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1467             final Object p4, final Object p5, final Object p6) {
1468         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6);
1469     }
1470 
1471     @Override
1472     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1473             final Object p4, final Object p5, final Object p6,
1474             final Object p7) {
1475         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1476     }
1477 
1478     @Override
1479     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1480             final Object p4, final Object p5, final Object p6,
1481             final Object p7, final Object p8) {
1482         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1483     }
1484 
1485     @Override
1486     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1487             final Object p4, final Object p5, final Object p6,
1488             final Object p7, final Object p8, final Object p9) {
1489         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1490     }
1491 
1492     @Override
1493     public boolean isDebugEnabled() {
1494         return isEnabled(Level.DEBUG, null, null);
1495     }
1496 
1497     @Override
1498     public boolean isDebugEnabled(final Marker marker) {
1499         return isEnabled(Level.DEBUG, marker, (Object) null, null);
1500     }
1501 
1502     @Override
1503     public boolean isEnabled(final Level level) {
1504         return isEnabled(level, null, (Object) null, null);
1505     }
1506 
1507     @Override
1508     public boolean isEnabled(final Level level, final Marker marker) {
1509         return isEnabled(level, marker, (Object) null, null);
1510     }
1511 
1512     @Override
1513     public boolean isErrorEnabled() {
1514         return isEnabled(Level.ERROR, null, (Object) null, null);
1515     }
1516 
1517     @Override
1518     public boolean isErrorEnabled(final Marker marker) {
1519         return isEnabled(Level.ERROR, marker, (Object) null, null);
1520     }
1521 
1522     @Override
1523     public boolean isFatalEnabled() {
1524         return isEnabled(Level.FATAL, null, (Object) null, null);
1525     }
1526 
1527     @Override
1528     public boolean isFatalEnabled(final Marker marker) {
1529         return isEnabled(Level.FATAL, marker, (Object) null, null);
1530     }
1531 
1532     @Override
1533     public boolean isInfoEnabled() {
1534         return isEnabled(Level.INFO, null, (Object) null, null);
1535     }
1536 
1537     @Override
1538     public boolean isInfoEnabled(final Marker marker) {
1539         return isEnabled(Level.INFO, marker, (Object) null, null);
1540     }
1541 
1542     @Override
1543     public boolean isTraceEnabled() {
1544         return isEnabled(Level.TRACE, null, (Object) null, null);
1545     }
1546 
1547     @Override
1548     public boolean isTraceEnabled(final Marker marker) {
1549         return isEnabled(Level.TRACE, marker, (Object) null, null);
1550     }
1551 
1552     @Override
1553     public boolean isWarnEnabled() {
1554         return isEnabled(Level.WARN, null, (Object) null, null);
1555     }
1556 
1557     @Override
1558     public boolean isWarnEnabled(final Marker marker) {
1559         return isEnabled(Level.WARN, marker, (Object) null, null);
1560     }
1561 
1562     @Override
1563     public void log(final Level level, final Marker marker, final Message msg) {
1564         logIfEnabled(FQCN, level, marker, msg, (Throwable) null);
1565     }
1566 
1567     @Override
1568     public void log(final Level level, final Marker marker, final Message msg, final Throwable t) {
1569         logIfEnabled(FQCN, level, marker, msg, t);
1570     }
1571 
1572     @Override
1573     public void log(final Level level, final Marker marker, final CharSequence message) {
1574         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1575     }
1576 
1577     @Override
1578     public void log(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
1579         if (isEnabled(level, marker, message, t)) {
1580             logMessage(FQCN, level, marker, message, t);
1581         }
1582     }
1583 
1584     @Override
1585     public void log(final Level level, final Marker marker, final Object message) {
1586         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1587     }
1588 
1589     @Override
1590     public void log(final Level level, final Marker marker, final Object message, final Throwable t) {
1591         if (isEnabled(level, marker, message, t)) {
1592             logMessage(FQCN, level, marker, message, t);
1593         }
1594     }
1595 
1596     @Override
1597     public void log(final Level level, final Marker marker, final String message) {
1598         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1599     }
1600 
1601     @Override
1602     public void log(final Level level, final Marker marker, final String message, final Object... params) {
1603         logIfEnabled(FQCN, level, marker, message, params);
1604     }
1605 
1606     @Override
1607     public void log(final Level level, final Marker marker, final String message, final Throwable t) {
1608         logIfEnabled(FQCN, level, marker, message, t);
1609     }
1610 
1611     @Override
1612     public void log(final Level level, final Message msg) {
1613         logIfEnabled(FQCN, level, null, msg, null);
1614     }
1615 
1616     @Override
1617     public void log(final Level level, final Message msg, final Throwable t) {
1618         logIfEnabled(FQCN, level, null, msg, t);
1619     }
1620 
1621     @Override
1622     public void log(final Level level, final CharSequence message) {
1623         logIfEnabled(FQCN, level, null, message, null);
1624     }
1625 
1626     @Override
1627     public void log(final Level level, final CharSequence message, final Throwable t) {
1628         logIfEnabled(FQCN, level, null, message, t);
1629     }
1630 
1631     @Override
1632     public void log(final Level level, final Object message) {
1633         logIfEnabled(FQCN, level, null, message, null);
1634     }
1635 
1636     @Override
1637     public void log(final Level level, final Object message, final Throwable t) {
1638         logIfEnabled(FQCN, level, null, message, t);
1639     }
1640 
1641     @Override
1642     public void log(final Level level, final String message) {
1643         logIfEnabled(FQCN, level, null, message, (Throwable) null);
1644     }
1645 
1646     @Override
1647     public void log(final Level level, final String message, final Object... params) {
1648         logIfEnabled(FQCN, level, null, message, params);
1649     }
1650 
1651     @Override
1652     public void log(final Level level, final String message, final Throwable t) {
1653         logIfEnabled(FQCN, level, null, message, t);
1654     }
1655 
1656     @Override
1657     public void log(final Level level, final Supplier<?> msgSupplier) {
1658         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
1659     }
1660 
1661     @Override
1662     public void log(final Level level, final Supplier<?> msgSupplier, final Throwable t) {
1663         logIfEnabled(FQCN, level, null, msgSupplier, t);
1664     }
1665 
1666     @Override
1667     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier) {
1668         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
1669     }
1670 
1671     @Override
1672     public void log(final Level level, final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1673         logIfEnabled(FQCN, level, marker, message, paramSuppliers);
1674     }
1675 
1676     @Override
1677     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1678         logIfEnabled(FQCN, level, marker, msgSupplier, t);
1679     }
1680 
1681     @Override
1682     public void log(final Level level, final String message, final Supplier<?>... paramSuppliers) {
1683         logIfEnabled(FQCN, level, null, message, paramSuppliers);
1684     }
1685 
1686     @Override
1687     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier) {
1688         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
1689     }
1690 
1691     @Override
1692     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1693         logIfEnabled(FQCN, level, marker, msgSupplier, t);
1694     }
1695 
1696     @Override
1697     public void log(final Level level, final MessageSupplier msgSupplier) {
1698         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
1699     }
1700 
1701     @Override
1702     public void log(final Level level, final MessageSupplier msgSupplier, final Throwable t) {
1703         logIfEnabled(FQCN, level, null, msgSupplier, t);
1704     }
1705 
1706     @Override
1707     public void log(final Level level, final Marker marker, final String message, final Object p0) {
1708         logIfEnabled(FQCN, level, marker, message, p0);
1709     }
1710 
1711     @Override
1712     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1) {
1713         logIfEnabled(FQCN, level, marker, message, p0, p1);
1714     }
1715 
1716     @Override
1717     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1718             final Object p2) {
1719         logIfEnabled(FQCN, level, marker, message, p0, p1, p2);
1720     }
1721 
1722     @Override
1723     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1724             final Object p2, final Object p3) {
1725         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3);
1726     }
1727 
1728     @Override
1729     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1730             final Object p2, final Object p3, final Object p4) {
1731         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4);
1732     }
1733 
1734     @Override
1735     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1736             final Object p2, final Object p3, final Object p4, final Object p5) {
1737         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5);
1738     }
1739 
1740     @Override
1741     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1742             final Object p2, final Object p3, final Object p4, final Object p5, final Object p6) {
1743         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6);
1744     }
1745 
1746     @Override
1747     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1748             final Object p2, final Object p3, final Object p4, final Object p5,
1749             final Object p6, final Object p7) {
1750         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1751     }
1752 
1753     @Override
1754     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1755             final Object p2, final Object p3, final Object p4, final Object p5,
1756             final Object p6, final Object p7, final Object p8) {
1757         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1758     }
1759 
1760     @Override
1761     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1762             final Object p2, final Object p3, final Object p4, final Object p5,
1763             final Object p6, final Object p7, final Object p8, final Object p9) {
1764         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1765     }
1766 
1767     @Override
1768     public void log(final Level level, final String message, final Object p0) {
1769         logIfEnabled(FQCN, level, null, message, p0);
1770     }
1771 
1772     @Override
1773     public void log(final Level level, final String message, final Object p0, final Object p1) {
1774         logIfEnabled(FQCN, level, null, message, p0, p1);
1775     }
1776 
1777     @Override
1778     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2) {
1779         logIfEnabled(FQCN, level, null, message, p0, p1, p2);
1780     }
1781 
1782     @Override
1783     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1784         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3);
1785     }
1786 
1787     @Override
1788     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1789             final Object p4) {
1790         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4);
1791     }
1792 
1793     @Override
1794     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1795             final Object p4, final Object p5) {
1796         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5);
1797     }
1798 
1799     @Override
1800     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1801             final Object p4, final Object p5, final Object p6) {
1802         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6);
1803     }
1804 
1805     @Override
1806     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1807             final Object p4, final Object p5, final Object p6, final Object p7) {
1808         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1809     }
1810 
1811     @Override
1812     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1813             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
1814         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1815     }
1816 
1817     @Override
1818     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1819             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
1820         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1821     }
1822 
1823     @Override
1824     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
1825             final Throwable t) {
1826         if (isEnabled(level, marker, msg, t)) {
1827             logMessage(fqcn, level, marker, msg, t);
1828         }
1829     }
1830 
1831     @Override
1832     public void logIfEnabled(final String fqcn, final Level level, final Marker marker,
1833             final MessageSupplier msgSupplier, final Throwable t) {
1834         if (isEnabled(level, marker, msgSupplier, t)) {
1835             logMessage(fqcn, level, marker, msgSupplier, t);
1836         }
1837     }
1838 
1839     @Override
1840     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Object message,
1841             final Throwable t) {
1842         if (isEnabled(level, marker, message, t)) {
1843             logMessage(fqcn, level, marker, message, t);
1844         }
1845     }
1846 
1847     @Override
1848     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final CharSequence message,
1849             final Throwable t) {
1850         if (isEnabled(level, marker, message, t)) {
1851             logMessage(fqcn, level, marker, message, t);
1852         }
1853     }
1854 
1855     @Override
1856     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1857             final Throwable t) {
1858         if (isEnabled(level, marker, msgSupplier, t)) {
1859             logMessage(fqcn, level, marker, msgSupplier, t);
1860         }
1861     }
1862 
1863     @Override
1864     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message) {
1865         if (isEnabled(level, marker, message)) {
1866             logMessage(fqcn, level, marker, message);
1867         }
1868     }
1869 
1870     @Override
1871     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1872             final Supplier<?>... paramSuppliers) {
1873         if (isEnabled(level, marker, message)) {
1874             logMessage(fqcn, level, marker, message, paramSuppliers);
1875         }
1876     }
1877 
1878     @Override
1879     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1880             final Object... params) {
1881         if (isEnabled(level, marker, message, params)) {
1882             logMessage(fqcn, level, marker, message, params);
1883         }
1884     }
1885 
1886     @Override
1887     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1888             final Object p0) {
1889         if (isEnabled(level, marker, message, p0)) {
1890             logMessage(fqcn, level, marker, message, p0);
1891         }
1892     }
1893 
1894     @Override
1895     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1896             final Object p0, final Object p1) {
1897         if (isEnabled(level, marker, message, p0, p1)) {
1898             logMessage(fqcn, level, marker, message, p0, p1);
1899         }
1900     }
1901 
1902     @Override
1903     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1904             final Object p0, final Object p1, final Object p2) {
1905         if (isEnabled(level, marker, message, p0, p1, p2)) {
1906             logMessage(fqcn, level, marker, message, p0, p1, p2);
1907         }
1908     }
1909 
1910     @Override
1911     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1912             final Object p0, final Object p1, final Object p2, final Object p3) {
1913         if (isEnabled(level, marker, message, p0, p1, p2, p3)) {
1914             logMessage(fqcn, level, marker, message, p0, p1, p2, p3);
1915         }
1916     }
1917 
1918     @Override
1919     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1920             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) {
1921         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4)) {
1922             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4);
1923         }
1924     }
1925 
1926     @Override
1927     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1928             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5) {
1929         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5)) {
1930             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5);
1931         }
1932     }
1933 
1934     @Override
1935     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1936             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1937             final Object p6) {
1938         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6)) {
1939             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6);
1940         }
1941     }
1942 
1943     @Override
1944     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1945             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1946             final Object p6, final Object p7) {
1947         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7)) {
1948             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1949         }
1950     }
1951 
1952     @Override
1953     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1954             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1955             final Object p6, final Object p7, final Object p8) {
1956         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
1957             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1958         }
1959     }
1960 
1961     @Override
1962     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1963             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1964             final Object p6, final Object p7, final Object p8, final Object p9) {
1965         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
1966             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1967         }
1968     }
1969 
1970     @Override
1971     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1972             final Throwable t) {
1973         if (isEnabled(level, marker, message, t)) {
1974             logMessage(fqcn, level, marker, message, t);
1975         }
1976     }
1977 
1978     protected void logMessage(final String fqcn, final Level level, final Marker marker, final CharSequence message,
1979             final Throwable t) {
1980         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1981     }
1982 
1983     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
1984             final Throwable t) {
1985         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1986     }
1987 
1988     protected void logMessage(final String fqcn, final Level level, final Marker marker,
1989             final MessageSupplier msgSupplier, final Throwable t) {
1990         final Message message = LambdaUtil.get(msgSupplier);
1991         logMessage(fqcn, level, marker, message, t);
1992     }
1993 
1994     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1995             final Throwable t) {
1996         final Message message = LambdaUtil.getMessage(msgSupplier, messageFactory);
1997         logMessage(fqcn, level, marker, message, t);
1998     }
1999 
2000     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2001             final Throwable t) {
2002         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
2003     }
2004 
2005     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message) {
2006         final Message msg = messageFactory.newMessage(message);
2007         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2008     }
2009 
2010     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2011             final Object... params) {
2012         final Message msg = messageFactory.newMessage(message, params);
2013         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2014     }
2015 
2016     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2017             final Object p0) {
2018         final Message msg = messageFactory.newMessage(message, p0);
2019         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2020     }
2021 
2022     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2023             final Object p0, final Object p1) {
2024         final Message msg = messageFactory.newMessage(message, p0, p1);
2025         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2026     }
2027 
2028     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2029             final Object p0, final Object p1, final Object p2) {
2030         final Message msg = messageFactory.newMessage(message, p0, p1, p2);
2031         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2032     }
2033 
2034     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2035             final Object p0, final Object p1, final Object p2, final Object p3) {
2036         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3);
2037         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2038     }
2039 
2040     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2041             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) {
2042         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4);
2043         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2044     }
2045 
2046     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2047             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5) {
2048         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5);
2049         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2050     }
2051 
2052     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2053             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
2054             final Object p6) {
2055         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6);
2056         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2057     }
2058 
2059     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2060             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
2061             final Object p6, final Object p7) {
2062         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
2063         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2064     }
2065 
2066     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2067             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
2068             final Object p6, final Object p7, final Object p8) {
2069         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2070         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2071     }
2072 
2073     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2074             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
2075             final Object p6, final Object p7, final Object p8, final Object p9) {
2076         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2077         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2078     }
2079 
2080     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2081             final Supplier<?>... paramSuppliers) {
2082         final Message msg = messageFactory.newMessage(message, LambdaUtil.getAll(paramSuppliers));
2083         logMessage(fqcn, level, marker, msg, msg.getThrowable());
2084     }
2085 
2086     @Override
2087     public void printf(final Level level, final Marker marker, final String format, final Object... params) {
2088         if (isEnabled(level, marker, format, params)) {
2089             final Message msg = new StringFormattedMessage(format, params);
2090             logMessage(FQCN, level, marker, msg, msg.getThrowable());
2091         }
2092     }
2093 
2094     @Override
2095     public void printf(final Level level, final String format, final Object... params) {
2096         if (isEnabled(level, null, format, params)) {
2097             final Message msg = new StringFormattedMessage(format, params);
2098             logMessage(FQCN, level, null, msg, msg.getThrowable());
2099         }
2100     }
2101 
2102     @Override
2103     public <T extends Throwable> T throwing(final T t) {
2104         return throwing(FQCN, Level.ERROR, t);
2105     }
2106 
2107     @Override
2108     public <T extends Throwable> T throwing(final Level level, final T t) {
2109         return throwing(FQCN, level, t);
2110     }
2111 
2112     /**
2113      * Logs a Throwable to be thrown.
2114      *
2115      * @param <T> the type of the Throwable.
2116      * @param fqcn the fully qualified class name of this Logger implementation.
2117      * @param level The logging Level.
2118      * @param t The Throwable.
2119      * @return the Throwable.
2120      */
2121     protected <T extends Throwable> T throwing(final String fqcn, final Level level, final T t) {
2122         if (isEnabled(level, THROWING_MARKER, (Object) null, null)) {
2123             logMessage(fqcn, level, THROWING_MARKER, throwingMsg(t), t);
2124         }
2125         return t;
2126     }
2127 
2128     protected Message throwingMsg(final Throwable t) {
2129         return messageFactory.newMessage(THROWING);
2130     }
2131 
2132     @Override
2133     public void trace(final Marker marker, final Message msg) {
2134         logIfEnabled(FQCN, Level.TRACE, marker, msg, null);
2135     }
2136 
2137     @Override
2138     public void trace(final Marker marker, final Message msg, final Throwable t) {
2139         logIfEnabled(FQCN, Level.TRACE, marker, msg, t);
2140     }
2141 
2142     @Override
2143     public void trace(final Marker marker, final CharSequence message) {
2144         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
2145     }
2146 
2147     @Override
2148     public void trace(final Marker marker, final CharSequence message, final Throwable t) {
2149         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2150     }
2151 
2152     @Override
2153     public void trace(final Marker marker, final Object message) {
2154         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
2155     }
2156 
2157     @Override
2158     public void trace(final Marker marker, final Object message, final Throwable t) {
2159         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2160     }
2161 
2162     @Override
2163     public void trace(final Marker marker, final String message) {
2164         logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null);
2165     }
2166 
2167     @Override
2168     public void trace(final Marker marker, final String message, final Object... params) {
2169         logIfEnabled(FQCN, Level.TRACE, marker, message, params);
2170     }
2171 
2172     @Override
2173     public void trace(final Marker marker, final String message, final Throwable t) {
2174         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2175     }
2176 
2177     @Override
2178     public void trace(final Message msg) {
2179         logIfEnabled(FQCN, Level.TRACE, null, msg, null);
2180     }
2181 
2182     @Override
2183     public void trace(final Message msg, final Throwable t) {
2184         logIfEnabled(FQCN, Level.TRACE, null, msg, t);
2185     }
2186 
2187     @Override
2188     public void trace(final CharSequence message) {
2189         logIfEnabled(FQCN, Level.TRACE, null, message, null);
2190     }
2191 
2192     @Override
2193     public void trace(final CharSequence message, final Throwable t) {
2194         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2195     }
2196 
2197     @Override
2198     public void trace(final Object message) {
2199         logIfEnabled(FQCN, Level.TRACE, null, message, null);
2200     }
2201 
2202     @Override
2203     public void trace(final Object message, final Throwable t) {
2204         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2205     }
2206 
2207     @Override
2208     public void trace(final String message) {
2209         logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null);
2210     }
2211 
2212     @Override
2213     public void trace(final String message, final Object... params) {
2214         logIfEnabled(FQCN, Level.TRACE, null, message, params);
2215     }
2216 
2217     @Override
2218     public void trace(final String message, final Throwable t) {
2219         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2220     }
2221 
2222     @Override
2223     public void trace(final Supplier<?> msgSupplier) {
2224         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
2225     }
2226 
2227     @Override
2228     public void trace(final Supplier<?> msgSupplier, final Throwable t) {
2229         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
2230     }
2231 
2232     @Override
2233     public void trace(final Marker marker, final Supplier<?> msgSupplier) {
2234         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
2235     }
2236 
2237     @Override
2238     public void trace(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
2239         logIfEnabled(FQCN, Level.TRACE, marker, message, paramSuppliers);
2240     }
2241 
2242     @Override
2243     public void trace(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
2244         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
2245     }
2246 
2247     @Override
2248     public void trace(final String message, final Supplier<?>... paramSuppliers) {
2249         logIfEnabled(FQCN, Level.TRACE, null, message, paramSuppliers);
2250     }
2251 
2252     @Override
2253     public void trace(final Marker marker, final MessageSupplier msgSupplier) {
2254         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
2255     }
2256 
2257     @Override
2258     public void trace(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
2259         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
2260     }
2261 
2262     @Override
2263     public void trace(final MessageSupplier msgSupplier) {
2264         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
2265     }
2266 
2267     @Override
2268     public void trace(final MessageSupplier msgSupplier, final Throwable t) {
2269         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
2270     }
2271 
2272     @Override
2273     public void trace(final Marker marker, final String message, final Object p0) {
2274         logIfEnabled(FQCN, Level.TRACE, marker, message, p0);
2275     }
2276 
2277     @Override
2278     public void trace(final Marker marker, final String message, final Object p0, final Object p1) {
2279         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1);
2280     }
2281 
2282     @Override
2283     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
2284         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2);
2285     }
2286 
2287     @Override
2288     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2289             final Object p3) {
2290         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3);
2291     }
2292 
2293     @Override
2294     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2295             final Object p3, final Object p4) {
2296         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4);
2297     }
2298 
2299     @Override
2300     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2301             final Object p3, final Object p4, final Object p5) {
2302         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5);
2303     }
2304 
2305     @Override
2306     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2307             final Object p3, final Object p4, final Object p5, final Object p6) {
2308         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6);
2309     }
2310 
2311     @Override
2312     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2313             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
2314         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
2315     }
2316 
2317     @Override
2318     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2319             final Object p3, final Object p4, final Object p5,
2320             final Object p6, final Object p7, final Object p8) {
2321         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2322     }
2323 
2324     @Override
2325     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2326             final Object p3, final Object p4, final Object p5,
2327             final Object p6, final Object p7, final Object p8, final Object p9) {
2328         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2329     }
2330 
2331     @Override
2332     public void trace(final String message, final Object p0) {
2333         logIfEnabled(FQCN, Level.TRACE, null, message, p0);
2334     }
2335 
2336     @Override
2337     public void trace(final String message, final Object p0, final Object p1) {
2338         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1);
2339     }
2340 
2341     @Override
2342     public void trace(final String message, final Object p0, final Object p1, final Object p2) {
2343         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2);
2344     }
2345 
2346     @Override
2347     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
2348         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3);
2349     }
2350 
2351     @Override
2352     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2353             final Object p4) {
2354         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4);
2355     }
2356 
2357     @Override
2358     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2359             final Object p4, final Object p5) {
2360         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5);
2361     }
2362 
2363     @Override
2364     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2365             final Object p4, final Object p5, final Object p6) {
2366         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6);
2367     }
2368 
2369     @Override
2370     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2371             final Object p4, final Object p5, final Object p6, final Object p7) {
2372         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
2373     }
2374 
2375     @Override
2376     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2377             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2378         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2379     }
2380 
2381     @Override
2382     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2383             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
2384         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2385     }
2386 
2387     @Override
2388     public EntryMessage traceEntry() {
2389         return enter(FQCN, null, (Object[]) null);
2390     }
2391 
2392     @Override
2393     public EntryMessage traceEntry(final String format, final Object... params) {
2394         return enter(FQCN, format, params);
2395     }
2396 
2397     @Override
2398     public EntryMessage traceEntry(final Supplier<?>... paramSuppliers) {
2399         return enter(FQCN, null, paramSuppliers);
2400     }
2401 
2402     @Override
2403     public EntryMessage traceEntry(final String format, final Supplier<?>... paramSuppliers) {
2404         return enter(FQCN, format, paramSuppliers);
2405     }
2406 
2407     @Override
2408     public EntryMessage traceEntry(final Message message) {
2409         return enter(FQCN, message);
2410     }
2411 
2412     @Override
2413     public void traceExit() {
2414         exit(FQCN, null, null);
2415     }
2416 
2417     @Override
2418     public <R> R traceExit(final R result) {
2419         return exit(FQCN, null, result);
2420     }
2421 
2422     @Override
2423     public <R> R traceExit(final String format, final R result) {
2424         return exit(FQCN, format, result);
2425     }
2426 
2427     @Override
2428     public void traceExit(final EntryMessage message) {
2429         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2430         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2431             logMessage(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(message), null);
2432         }
2433     }
2434 
2435     @Override
2436     public <R> R traceExit(final EntryMessage message, final R result) {
2437         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2438         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2439             logMessage(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null);
2440         }
2441         return result;
2442     }
2443 
2444     @Override
2445     public <R> R traceExit(final Message message, final R result) {
2446         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2447         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2448             logMessage(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null);
2449         }
2450         return result;
2451     }
2452 
2453     @Override
2454     public void warn(final Marker marker, final Message msg) {
2455         logIfEnabled(FQCN, Level.WARN, marker, msg, null);
2456     }
2457 
2458     @Override
2459     public void warn(final Marker marker, final Message msg, final Throwable t) {
2460         logIfEnabled(FQCN, Level.WARN, marker, msg, t);
2461     }
2462 
2463     @Override
2464     public void warn(final Marker marker, final CharSequence message) {
2465         logIfEnabled(FQCN, Level.WARN, marker, message, null);
2466     }
2467 
2468     @Override
2469     public void warn(final Marker marker, final CharSequence message, final Throwable t) {
2470         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2471     }
2472 
2473     @Override
2474     public void warn(final Marker marker, final Object message) {
2475         logIfEnabled(FQCN, Level.WARN, marker, message, null);
2476     }
2477 
2478     @Override
2479     public void warn(final Marker marker, final Object message, final Throwable t) {
2480         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2481     }
2482 
2483     @Override
2484     public void warn(final Marker marker, final String message) {
2485         logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null);
2486     }
2487 
2488     @Override
2489     public void warn(final Marker marker, final String message, final Object... params) {
2490         logIfEnabled(FQCN, Level.WARN, marker, message, params);
2491     }
2492 
2493     @Override
2494     public void warn(final Marker marker, final String message, final Throwable t) {
2495         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2496     }
2497 
2498     @Override
2499     public void warn(final Message msg) {
2500         logIfEnabled(FQCN, Level.WARN, null, msg, null);
2501     }
2502 
2503     @Override
2504     public void warn(final Message msg, final Throwable t) {
2505         logIfEnabled(FQCN, Level.WARN, null, msg, t);
2506     }
2507 
2508     @Override
2509     public void warn(final CharSequence message) {
2510         logIfEnabled(FQCN, Level.WARN, null, message, null);
2511     }
2512 
2513     @Override
2514     public void warn(final CharSequence message, final Throwable t) {
2515         logIfEnabled(FQCN, Level.WARN, null, message, t);
2516     }
2517 
2518     @Override
2519     public void warn(final Object message) {
2520         logIfEnabled(FQCN, Level.WARN, null, message, null);
2521     }
2522 
2523     @Override
2524     public void warn(final Object message, final Throwable t) {
2525         logIfEnabled(FQCN, Level.WARN, null, message, t);
2526     }
2527 
2528     @Override
2529     public void warn(final String message) {
2530         logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null);
2531     }
2532 
2533     @Override
2534     public void warn(final String message, final Object... params) {
2535         logIfEnabled(FQCN, Level.WARN, null, message, params);
2536     }
2537 
2538     @Override
2539     public void warn(final String message, final Throwable t) {
2540         logIfEnabled(FQCN, Level.WARN, null, message, t);
2541     }
2542 
2543     @Override
2544     public void warn(final Supplier<?> msgSupplier) {
2545         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
2546     }
2547 
2548     @Override
2549     public void warn(final Supplier<?> msgSupplier, final Throwable t) {
2550         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
2551     }
2552 
2553     @Override
2554     public void warn(final Marker marker, final Supplier<?> msgSupplier) {
2555         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
2556     }
2557 
2558     @Override
2559     public void warn(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
2560         logIfEnabled(FQCN, Level.WARN, marker, message, paramSuppliers);
2561     }
2562 
2563     @Override
2564     public void warn(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
2565         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
2566     }
2567 
2568     @Override
2569     public void warn(final String message, final Supplier<?>... paramSuppliers) {
2570         logIfEnabled(FQCN, Level.WARN, null, message, paramSuppliers);
2571     }
2572 
2573     @Override
2574     public void warn(final Marker marker, final MessageSupplier msgSupplier) {
2575         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
2576     }
2577 
2578     @Override
2579     public void warn(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
2580         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
2581     }
2582 
2583     @Override
2584     public void warn(final MessageSupplier msgSupplier) {
2585         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
2586     }
2587 
2588     @Override
2589     public void warn(final MessageSupplier msgSupplier, final Throwable t) {
2590         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
2591     }
2592 
2593     @Override
2594     public void warn(final Marker marker, final String message, final Object p0) {
2595         logIfEnabled(FQCN, Level.WARN, marker, message, p0);
2596     }
2597 
2598     @Override
2599     public void warn(final Marker marker, final String message, final Object p0, final Object p1) {
2600         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1);
2601     }
2602 
2603     @Override
2604     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
2605         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2);
2606     }
2607 
2608     @Override
2609     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2610             final Object p3) {
2611         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3);
2612     }
2613 
2614     @Override
2615     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2616             final Object p3, final Object p4) {
2617         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4);
2618     }
2619 
2620     @Override
2621     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2622             final Object p3, final Object p4, final Object p5) {
2623         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5);
2624     }
2625 
2626     @Override
2627     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2628             final Object p3, final Object p4, final Object p5, final Object p6) {
2629         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6);
2630     }
2631 
2632     @Override
2633     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2634             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
2635         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
2636     }
2637 
2638     @Override
2639     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2640             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2641         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2642     }
2643 
2644     @Override
2645     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2646             final Object p3, final Object p4, final Object p5,
2647             final Object p6, final Object p7, final Object p8, final Object p9) {
2648         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2649     }
2650 
2651     @Override
2652     public void warn(final String message, final Object p0) {
2653         logIfEnabled(FQCN, Level.WARN, null, message, p0);
2654     }
2655 
2656     @Override
2657     public void warn(final String message, final Object p0, final Object p1) {
2658         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1);
2659     }
2660 
2661     @Override
2662     public void warn(final String message, final Object p0, final Object p1, final Object p2) {
2663         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2);
2664     }
2665 
2666     @Override
2667     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
2668         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3);
2669     }
2670 
2671     @Override
2672     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2673             final Object p4) {
2674         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4);
2675     }
2676 
2677     @Override
2678     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2679             final Object p4, final Object p5) {
2680         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5);
2681     }
2682 
2683     @Override
2684     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2685             final Object p4, final Object p5, final Object p6) {
2686         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6);
2687     }
2688 
2689     @Override
2690     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2691             final Object p4, final Object p5, final Object p6, final Object p7) {
2692         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
2693     }
2694 
2695     @Override
2696     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2697             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2698         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2699     }
2700 
2701     @Override
2702     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2703             final Object p4, final Object p5, final Object p6,
2704             final Object p7, final Object p8, final Object p9) {
2705         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2706     }
2707 }