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