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     @Deprecated
582     @Override
583     public void entry() {
584         entry(FQCN, (Object[]) null);
585     }
586 
587     @Override
588     public void entry(final Object... params) {
589         entry(FQCN, params);
590     }
591 
592     /**
593      * Logs entry to a method with location information.
594      *
595      * @param fqcn The fully qualified class name of the <b>caller</b>.
596      * @param params The parameters to the method.
597      */
598     protected void entry(final String fqcn, final Object... params) {
599         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
600             if (params == null) {
601                 logMessageSafely(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(null, (Supplier<?>[]) null), null);
602             } else {
603                 logMessageSafely(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(null, params), null);
604             }
605         }
606     }
607 
608     protected EntryMessage entryMsg(final String format, final Object... params) {
609         final int count = params == null ? 0 : params.length;
610         if (count == 0) {
611             if (Strings.isEmpty(format)) {
612                 return flowMessageFactory.newEntryMessage(null);
613             }
614             return flowMessageFactory.newEntryMessage(new SimpleMessage(format));
615         }
616         if (format != null) {
617             return flowMessageFactory.newEntryMessage(new ParameterizedMessage(format, params));
618         }
619         final StringBuilder sb = new StringBuilder();
620         sb.append("params(");
621         for (int i = 0; i < count; i++) {
622             if (i > 0) {
623                 sb.append(", ");
624             }
625             final Object parm = params[i];
626             sb.append(parm instanceof Message ? ((Message) parm).getFormattedMessage() : String.valueOf(parm));
627         }
628         sb.append(')');
629         return flowMessageFactory.newEntryMessage(new SimpleMessage(sb));
630     }
631 
632     protected EntryMessage entryMsg(final String format, final MessageSupplier... paramSuppliers) {
633         final int count = paramSuppliers == null ? 0 : paramSuppliers.length;
634         final Object[] params = new Object[count];
635         for (int i = 0; i < count; i++) {
636             params[i] = paramSuppliers[i].get();
637             params[i] = params[i] != null ? ((Message) params[i]).getFormattedMessage() : null;
638         }
639         return entryMsg(format, params);
640     }
641 
642     protected EntryMessage entryMsg(final String format, final Supplier<?>... paramSuppliers) {
643         final int count = paramSuppliers == null ? 0 : paramSuppliers.length;
644         final Object[] params = new Object[count];
645         for (int i = 0; i < count; i++) {
646             params[i] = paramSuppliers[i].get();
647             if (params[i] instanceof Message) {
648                 params[i] = ((Message) params[i]).getFormattedMessage();
649             }
650         }
651         return entryMsg(format, params);
652     }
653 
654     @Override
655     public void error(final Marker marker, final Message msg) {
656         logIfEnabled(FQCN, Level.ERROR, marker, msg, msg != null ? msg.getThrowable() : null);
657     }
658 
659     @Override
660     public void error(final Marker marker, final Message msg, final Throwable t) {
661         logIfEnabled(FQCN, Level.ERROR, marker, msg, t);
662     }
663 
664     @Override
665     public void error(final Marker marker, final CharSequence message) {
666         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
667     }
668 
669     @Override
670     public void error(final Marker marker, final CharSequence message, final Throwable t) {
671         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
672     }
673 
674     @Override
675     public void error(final Marker marker, final Object message) {
676         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
677     }
678 
679     @Override
680     public void error(final Marker marker, final Object message, final Throwable t) {
681         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
682     }
683 
684     @Override
685     public void error(final Marker marker, final String message) {
686         logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null);
687     }
688 
689     @Override
690     public void error(final Marker marker, final String message, final Object... params) {
691         logIfEnabled(FQCN, Level.ERROR, marker, message, params);
692     }
693 
694     @Override
695     public void error(final Marker marker, final String message, final Throwable t) {
696         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
697     }
698 
699     @Override
700     public void error(final Message msg) {
701         logIfEnabled(FQCN, Level.ERROR, null, msg, msg != null ? msg.getThrowable() : null);
702     }
703 
704     @Override
705     public void error(final Message msg, final Throwable t) {
706         logIfEnabled(FQCN, Level.ERROR, null, msg, t);
707     }
708 
709     @Override
710     public void error(final CharSequence message) {
711         logIfEnabled(FQCN, Level.ERROR, null, message, null);
712     }
713 
714     @Override
715     public void error(final CharSequence message, final Throwable t) {
716         logIfEnabled(FQCN, Level.ERROR, null, message, t);
717     }
718 
719     @Override
720     public void error(final Object message) {
721         logIfEnabled(FQCN, Level.ERROR, null, message, null);
722     }
723 
724     @Override
725     public void error(final Object message, final Throwable t) {
726         logIfEnabled(FQCN, Level.ERROR, null, message, t);
727     }
728 
729     @Override
730     public void error(final String message) {
731         logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null);
732     }
733 
734     @Override
735     public void error(final String message, final Object... params) {
736         logIfEnabled(FQCN, Level.ERROR, null, message, params);
737     }
738 
739     @Override
740     public void error(final String message, final Throwable t) {
741         logIfEnabled(FQCN, Level.ERROR, null, message, t);
742     }
743 
744     @Override
745     public void error(final Supplier<?> msgSupplier) {
746         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
747     }
748 
749     @Override
750     public void error(final Supplier<?> msgSupplier, final Throwable t) {
751         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
752     }
753 
754     @Override
755     public void error(final Marker marker, final Supplier<?> msgSupplier) {
756         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
757     }
758 
759     @Override
760     public void error(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
761         logIfEnabled(FQCN, Level.ERROR, marker, message, paramSuppliers);
762     }
763 
764     @Override
765     public void error(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
766         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
767     }
768 
769     @Override
770     public void error(final String message, final Supplier<?>... paramSuppliers) {
771         logIfEnabled(FQCN, Level.ERROR, null, message, paramSuppliers);
772     }
773 
774     @Override
775     public void error(final Marker marker, final MessageSupplier msgSupplier) {
776         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
777     }
778 
779     @Override
780     public void error(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
781         logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
782     }
783 
784     @Override
785     public void error(final MessageSupplier msgSupplier) {
786         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
787     }
788 
789     @Override
790     public void error(final MessageSupplier msgSupplier, final Throwable t) {
791         logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
792     }
793 
794     @Override
795     public void error(final Marker marker, final String message, final Object p0) {
796         logIfEnabled(FQCN, Level.ERROR, marker, message, p0);
797     }
798 
799     @Override
800     public void error(final Marker marker, final String message, final Object p0, final Object p1) {
801         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1);
802     }
803 
804     @Override
805     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
806         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2);
807     }
808 
809     @Override
810     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
811             final Object p3) {
812         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3);
813     }
814 
815     @Override
816     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
817             final Object p3, final Object p4) {
818         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4);
819     }
820 
821     @Override
822     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
823             final Object p3, final Object p4, final Object p5) {
824         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5);
825     }
826 
827     @Override
828     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
829             final Object p3, final Object p4, final Object p5,
830             final Object p6) {
831         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6);
832     }
833 
834     @Override
835     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
836             final Object p3, final Object p4, final Object p5,
837             final Object p6, final Object p7) {
838         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
839     }
840 
841     @Override
842     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
843             final Object p3, final Object p4, final Object p5,
844             final Object p6, final Object p7, final Object p8) {
845         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
846     }
847 
848     @Override
849     public void error(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
850             final Object p3, final Object p4, final Object p5,
851             final Object p6, final Object p7, final Object p8, final Object p9) {
852         logIfEnabled(FQCN, Level.ERROR, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
853     }
854 
855     @Override
856     public void error(final String message, final Object p0) {
857         logIfEnabled(FQCN, Level.ERROR, null, message, p0);
858     }
859 
860     @Override
861     public void error(final String message, final Object p0, final Object p1) {
862         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1);
863     }
864 
865     @Override
866     public void error(final String message, final Object p0, final Object p1, final Object p2) {
867         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2);
868     }
869 
870     @Override
871     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
872         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3);
873     }
874 
875     @Override
876     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
877             final Object p4) {
878         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4);
879     }
880 
881     @Override
882     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
883             final Object p4, final Object p5) {
884         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5);
885     }
886 
887     @Override
888     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
889             final Object p4, final Object p5, final Object p6) {
890         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6);
891     }
892 
893     @Override
894     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
895             final Object p4, final Object p5, final Object p6, final Object p7) {
896         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
897     }
898 
899     @Override
900     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
901             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
902         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
903     }
904 
905     @Override
906     public void error(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
907             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
908         logIfEnabled(FQCN, Level.ERROR, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
909     }
910 
911     @Deprecated
912     @Override
913     public void exit() {
914         exit(FQCN, (Object) null);
915     }
916 
917     @Deprecated
918     @Override
919     public <R> R exit(final R result) {
920         return exit(FQCN, result);
921     }
922 
923     /**
924      * Logs exiting from a method with the result and location information.
925      *
926      * @param fqcn The fully qualified class name of the <b>caller</b>.
927      * @param <R> The type of the parameter and object being returned.
928      * @param result The result being returned from the method call.
929      * @return the return value passed to this method.
930      */
931     protected <R> R exit(final String fqcn, final R result) {
932         if (isEnabled(Level.TRACE, EXIT_MARKER, (CharSequence) null, null)) {
933             logMessageSafely(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(null, result), null);
934         }
935         return result;
936     }
937 
938     /**
939      * Logs exiting from a method with the result and location information.
940      *
941      * @param fqcn The fully qualified class name of the <b>caller</b>.
942      * @param <R> The type of the parameter and object being returned.
943      * @param result The result being returned from the method call.
944      * @return the return value passed to this method.
945      */
946     protected <R> R exit(final String fqcn, final String format, final R result) {
947         if (isEnabled(Level.TRACE, EXIT_MARKER, (CharSequence) null, null)) {
948             logMessageSafely(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(format, result), null);
949         }
950         return result;
951     }
952 
953     protected Message exitMsg(final String format, final Object result) {
954         if (result == null) {
955             if (format == null) {
956                 return messageFactory.newMessage("Exit");
957             }
958             return messageFactory.newMessage("Exit: " + format);
959         }
960         if (format == null) {
961             return messageFactory.newMessage("Exit with(" + result + ')');
962         }
963         return messageFactory.newMessage("Exit: " + format, result);
964 
965     }
966 
967     @Override
968     public void fatal(final Marker marker, final Message msg) {
969         logIfEnabled(FQCN, Level.FATAL, marker, msg, msg != null ? msg.getThrowable() : null);
970     }
971 
972     @Override
973     public void fatal(final Marker marker, final Message msg, final Throwable t) {
974         logIfEnabled(FQCN, Level.FATAL, marker, msg, t);
975     }
976 
977     @Override
978     public void fatal(final Marker marker, final CharSequence message) {
979         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
980     }
981 
982     @Override
983     public void fatal(final Marker marker, final CharSequence message, final Throwable t) {
984         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
985     }
986 
987     @Override
988     public void fatal(final Marker marker, final Object message) {
989         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
990     }
991 
992     @Override
993     public void fatal(final Marker marker, final Object message, final Throwable t) {
994         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
995     }
996 
997     @Override
998     public void fatal(final Marker marker, final String message) {
999         logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null);
1000     }
1001 
1002     @Override
1003     public void fatal(final Marker marker, final String message, final Object... params) {
1004         logIfEnabled(FQCN, Level.FATAL, marker, message, params);
1005     }
1006 
1007     @Override
1008     public void fatal(final Marker marker, final String message, final Throwable t) {
1009         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
1010     }
1011 
1012     @Override
1013     public void fatal(final Message msg) {
1014         logIfEnabled(FQCN, Level.FATAL, null, msg, msg != null ? msg.getThrowable() : null);
1015     }
1016 
1017     @Override
1018     public void fatal(final Message msg, final Throwable t) {
1019         logIfEnabled(FQCN, Level.FATAL, null, msg, t);
1020     }
1021 
1022     @Override
1023     public void fatal(final CharSequence message) {
1024         logIfEnabled(FQCN, Level.FATAL, null, message, null);
1025     }
1026 
1027     @Override
1028     public void fatal(final CharSequence message, final Throwable t) {
1029         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1030     }
1031 
1032     @Override
1033     public void fatal(final Object message) {
1034         logIfEnabled(FQCN, Level.FATAL, null, message, null);
1035     }
1036 
1037     @Override
1038     public void fatal(final Object message, final Throwable t) {
1039         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1040     }
1041 
1042     @Override
1043     public void fatal(final String message) {
1044         logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null);
1045     }
1046 
1047     @Override
1048     public void fatal(final String message, final Object... params) {
1049         logIfEnabled(FQCN, Level.FATAL, null, message, params);
1050     }
1051 
1052     @Override
1053     public void fatal(final String message, final Throwable t) {
1054         logIfEnabled(FQCN, Level.FATAL, null, message, t);
1055     }
1056 
1057     @Override
1058     public void fatal(final Supplier<?> msgSupplier) {
1059         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
1060     }
1061 
1062     @Override
1063     public void fatal(final Supplier<?> msgSupplier, final Throwable t) {
1064         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
1065     }
1066 
1067     @Override
1068     public void fatal(final Marker marker, final Supplier<?> msgSupplier) {
1069         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
1070     }
1071 
1072     @Override
1073     public void fatal(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1074         logIfEnabled(FQCN, Level.FATAL, marker, message, paramSuppliers);
1075     }
1076 
1077     @Override
1078     public void fatal(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1079         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
1080     }
1081 
1082     @Override
1083     public void fatal(final String message, final Supplier<?>... paramSuppliers) {
1084         logIfEnabled(FQCN, Level.FATAL, null, message, paramSuppliers);
1085     }
1086 
1087     @Override
1088     public void fatal(final Marker marker, final MessageSupplier msgSupplier) {
1089         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
1090     }
1091 
1092     @Override
1093     public void fatal(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1094         logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
1095     }
1096 
1097     @Override
1098     public void fatal(final MessageSupplier msgSupplier) {
1099         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
1100     }
1101 
1102     @Override
1103     public void fatal(final MessageSupplier msgSupplier, final Throwable t) {
1104         logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
1105     }
1106 
1107     @Override
1108     public void fatal(final Marker marker, final String message, final Object p0) {
1109         logIfEnabled(FQCN, Level.FATAL, marker, message, p0);
1110     }
1111 
1112     @Override
1113     public void fatal(final Marker marker, final String message, final Object p0, final Object p1) {
1114         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1);
1115     }
1116 
1117     @Override
1118     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
1119         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2);
1120     }
1121 
1122     @Override
1123     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1124             final Object p3) {
1125         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3);
1126     }
1127 
1128     @Override
1129     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1130             final Object p3, final Object p4) {
1131         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4);
1132     }
1133 
1134     @Override
1135     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1136             final Object p3, final Object p4, final Object p5) {
1137         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5);
1138     }
1139 
1140     @Override
1141     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1142             final Object p3, final Object p4, final Object p5, final Object p6) {
1143         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6);
1144     }
1145 
1146     @Override
1147     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1148             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
1149         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
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) {
1156         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1157     }
1158 
1159     @Override
1160     public void fatal(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1161             final Object p3, final Object p4, final Object p5,
1162             final Object p6, final Object p7, final Object p8, final Object p9) {
1163         logIfEnabled(FQCN, Level.FATAL, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1164     }
1165 
1166     @Override
1167     public void fatal(final String message, final Object p0) {
1168         logIfEnabled(FQCN, Level.FATAL, null, message, p0);
1169     }
1170 
1171     @Override
1172     public void fatal(final String message, final Object p0, final Object p1) {
1173         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1);
1174     }
1175 
1176     @Override
1177     public void fatal(final String message, final Object p0, final Object p1, final Object p2) {
1178         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2);
1179     }
1180 
1181     @Override
1182     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1183         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3);
1184     }
1185 
1186     @Override
1187     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1188             final Object p4) {
1189         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4);
1190     }
1191 
1192     @Override
1193     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1194             final Object p4, final Object p5) {
1195         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5);
1196     }
1197 
1198     @Override
1199     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1200             final Object p4, final Object p5, final Object p6) {
1201         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6);
1202     }
1203 
1204     @Override
1205     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1206             final Object p4, final Object p5, final Object p6, final Object p7) {
1207         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1208     }
1209 
1210     @Override
1211     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1212             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
1213         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1214     }
1215 
1216     @Override
1217     public void fatal(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1218             final Object p4, final Object p5, final Object p6,
1219             final Object p7, final Object p8, final Object p9) {
1220         logIfEnabled(FQCN, Level.FATAL, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1221     }
1222 
1223     @SuppressWarnings("unchecked")
1224     @Override
1225     public <MF extends MessageFactory> MF getMessageFactory() {
1226         return (MF) messageFactory;
1227     }
1228 
1229     @Override
1230     public String getName() {
1231         return name;
1232     }
1233 
1234     @Override
1235     public void info(final Marker marker, final Message msg) {
1236         logIfEnabled(FQCN, Level.INFO, marker, msg, msg != null ? msg.getThrowable() : null);
1237     }
1238 
1239     @Override
1240     public void info(final Marker marker, final Message msg, final Throwable t) {
1241         logIfEnabled(FQCN, Level.INFO, marker, msg, t);
1242     }
1243 
1244     @Override
1245     public void info(final Marker marker, final CharSequence message) {
1246         logIfEnabled(FQCN, Level.INFO, marker, message, null);
1247     }
1248 
1249     @Override
1250     public void info(final Marker marker, final CharSequence message, final Throwable t) {
1251         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1252     }
1253 
1254     @Override
1255     public void info(final Marker marker, final Object message) {
1256         logIfEnabled(FQCN, Level.INFO, marker, message, null);
1257     }
1258 
1259     @Override
1260     public void info(final Marker marker, final Object message, final Throwable t) {
1261         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1262     }
1263 
1264     @Override
1265     public void info(final Marker marker, final String message) {
1266         logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null);
1267     }
1268 
1269     @Override
1270     public void info(final Marker marker, final String message, final Object... params) {
1271         logIfEnabled(FQCN, Level.INFO, marker, message, params);
1272     }
1273 
1274     @Override
1275     public void info(final Marker marker, final String message, final Throwable t) {
1276         logIfEnabled(FQCN, Level.INFO, marker, message, t);
1277     }
1278 
1279     @Override
1280     public void info(final Message msg) {
1281         logIfEnabled(FQCN, Level.INFO, null, msg, msg != null ? msg.getThrowable() : null);
1282     }
1283 
1284     @Override
1285     public void info(final Message msg, final Throwable t) {
1286         logIfEnabled(FQCN, Level.INFO, null, msg, t);
1287     }
1288 
1289     @Override
1290     public void info(final CharSequence message) {
1291         logIfEnabled(FQCN, Level.INFO, null, message, null);
1292     }
1293 
1294     @Override
1295     public void info(final CharSequence message, final Throwable t) {
1296         logIfEnabled(FQCN, Level.INFO, null, message, t);
1297     }
1298 
1299     @Override
1300     public void info(final Object message) {
1301         logIfEnabled(FQCN, Level.INFO, null, message, null);
1302     }
1303 
1304     @Override
1305     public void info(final Object message, final Throwable t) {
1306         logIfEnabled(FQCN, Level.INFO, null, message, t);
1307     }
1308 
1309     @Override
1310     public void info(final String message) {
1311         logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
1312     }
1313 
1314     @Override
1315     public void info(final String message, final Object... params) {
1316         logIfEnabled(FQCN, Level.INFO, null, message, params);
1317     }
1318 
1319     @Override
1320     public void info(final String message, final Throwable t) {
1321         logIfEnabled(FQCN, Level.INFO, null, message, t);
1322     }
1323 
1324     @Override
1325     public void info(final Supplier<?> msgSupplier) {
1326         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
1327     }
1328 
1329     @Override
1330     public void info(final Supplier<?> msgSupplier, final Throwable t) {
1331         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
1332     }
1333 
1334     @Override
1335     public void info(final Marker marker, final Supplier<?> msgSupplier) {
1336         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
1337     }
1338 
1339     @Override
1340     public void info(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1341         logIfEnabled(FQCN, Level.INFO, marker, message, paramSuppliers);
1342     }
1343 
1344     @Override
1345     public void info(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1346         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
1347     }
1348 
1349     @Override
1350     public void info(final String message, final Supplier<?>... paramSuppliers) {
1351         logIfEnabled(FQCN, Level.INFO, null, message, paramSuppliers);
1352     }
1353 
1354     @Override
1355     public void info(final Marker marker, final MessageSupplier msgSupplier) {
1356         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
1357     }
1358 
1359     @Override
1360     public void info(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1361         logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
1362     }
1363 
1364     @Override
1365     public void info(final MessageSupplier msgSupplier) {
1366         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
1367     }
1368 
1369     @Override
1370     public void info(final MessageSupplier msgSupplier, final Throwable t) {
1371         logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
1372     }
1373 
1374     @Override
1375     public void info(final Marker marker, final String message, final Object p0) {
1376         logIfEnabled(FQCN, Level.INFO, marker, message, p0);
1377     }
1378 
1379     @Override
1380     public void info(final Marker marker, final String message, final Object p0, final Object p1) {
1381         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1);
1382     }
1383 
1384     @Override
1385     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
1386         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2);
1387     }
1388 
1389     @Override
1390     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1391             final Object p3) {
1392         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3);
1393     }
1394 
1395     @Override
1396     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1397             final Object p3, final Object p4) {
1398         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4);
1399     }
1400 
1401     @Override
1402     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1403             final Object p3, final Object p4, final Object p5) {
1404         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5);
1405     }
1406 
1407     @Override
1408     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1409             final Object p3, final Object p4, final Object p5, final Object p6) {
1410         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6);
1411     }
1412 
1413     @Override
1414     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1415             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
1416         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1417     }
1418 
1419     @Override
1420     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1421             final Object p3, final Object p4, final Object p5,
1422             final Object p6, final Object p7, final Object p8) {
1423         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1424     }
1425 
1426     @Override
1427     public void info(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
1428             final Object p3, final Object p4, final Object p5,
1429             final Object p6, final Object p7, final Object p8, final Object p9) {
1430         logIfEnabled(FQCN, Level.INFO, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1431     }
1432 
1433     @Override
1434     public void info(final String message, final Object p0) {
1435         logIfEnabled(FQCN, Level.INFO, null, message, p0);
1436     }
1437 
1438     @Override
1439     public void info(final String message, final Object p0, final Object p1) {
1440         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1);
1441     }
1442 
1443     @Override
1444     public void info(final String message, final Object p0, final Object p1, final Object p2) {
1445         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2);
1446     }
1447 
1448     @Override
1449     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1450         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3);
1451     }
1452 
1453     @Override
1454     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1455             final Object p4) {
1456         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4);
1457     }
1458 
1459     @Override
1460     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1461             final Object p4, final Object p5) {
1462         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5);
1463     }
1464 
1465     @Override
1466     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1467             final Object p4, final Object p5, final Object p6) {
1468         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6);
1469     }
1470 
1471     @Override
1472     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1473             final Object p4, final Object p5, final Object p6,
1474             final Object p7) {
1475         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1476     }
1477 
1478     @Override
1479     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1480             final Object p4, final Object p5, final Object p6,
1481             final Object p7, final Object p8) {
1482         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1483     }
1484 
1485     @Override
1486     public void info(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1487             final Object p4, final Object p5, final Object p6,
1488             final Object p7, final Object p8, final Object p9) {
1489         logIfEnabled(FQCN, Level.INFO, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1490     }
1491 
1492     @Override
1493     public boolean isDebugEnabled() {
1494         return isEnabled(Level.DEBUG, null, null);
1495     }
1496 
1497     @Override
1498     public boolean isDebugEnabled(final Marker marker) {
1499         return isEnabled(Level.DEBUG, marker, (Object) null, null);
1500     }
1501 
1502     @Override
1503     public boolean isEnabled(final Level level) {
1504         return isEnabled(level, null, (Object) null, null);
1505     }
1506 
1507     @Override
1508     public boolean isEnabled(final Level level, final Marker marker) {
1509         return isEnabled(level, marker, (Object) null, null);
1510     }
1511 
1512     @Override
1513     public boolean isErrorEnabled() {
1514         return isEnabled(Level.ERROR, null, (Object) null, null);
1515     }
1516 
1517     @Override
1518     public boolean isErrorEnabled(final Marker marker) {
1519         return isEnabled(Level.ERROR, marker, (Object) null, null);
1520     }
1521 
1522     @Override
1523     public boolean isFatalEnabled() {
1524         return isEnabled(Level.FATAL, null, (Object) null, null);
1525     }
1526 
1527     @Override
1528     public boolean isFatalEnabled(final Marker marker) {
1529         return isEnabled(Level.FATAL, marker, (Object) null, null);
1530     }
1531 
1532     @Override
1533     public boolean isInfoEnabled() {
1534         return isEnabled(Level.INFO, null, (Object) null, null);
1535     }
1536 
1537     @Override
1538     public boolean isInfoEnabled(final Marker marker) {
1539         return isEnabled(Level.INFO, marker, (Object) null, null);
1540     }
1541 
1542     @Override
1543     public boolean isTraceEnabled() {
1544         return isEnabled(Level.TRACE, null, (Object) null, null);
1545     }
1546 
1547     @Override
1548     public boolean isTraceEnabled(final Marker marker) {
1549         return isEnabled(Level.TRACE, marker, (Object) null, null);
1550     }
1551 
1552     @Override
1553     public boolean isWarnEnabled() {
1554         return isEnabled(Level.WARN, null, (Object) null, null);
1555     }
1556 
1557     @Override
1558     public boolean isWarnEnabled(final Marker marker) {
1559         return isEnabled(Level.WARN, marker, (Object) null, null);
1560     }
1561 
1562     @Override
1563     public void log(final Level level, final Marker marker, final Message msg) {
1564         logIfEnabled(FQCN, level, marker, msg, msg != null ? msg.getThrowable() : null);
1565     }
1566 
1567     @Override
1568     public void log(final Level level, final Marker marker, final Message msg, final Throwable t) {
1569         logIfEnabled(FQCN, level, marker, msg, t);
1570     }
1571 
1572     @Override
1573     public void log(final Level level, final Marker marker, final CharSequence message) {
1574         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1575     }
1576 
1577     @Override
1578     public void log(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
1579         if (isEnabled(level, marker, message, t)) {
1580             logMessage(FQCN, level, marker, message, t);
1581         }
1582     }
1583 
1584     @Override
1585     public void log(final Level level, final Marker marker, final Object message) {
1586         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1587     }
1588 
1589     @Override
1590     public void log(final Level level, final Marker marker, final Object message, final Throwable t) {
1591         if (isEnabled(level, marker, message, t)) {
1592             logMessage(FQCN, level, marker, message, t);
1593         }
1594     }
1595 
1596     @Override
1597     public void log(final Level level, final Marker marker, final String message) {
1598         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
1599     }
1600 
1601     @Override
1602     public void log(final Level level, final Marker marker, final String message, final Object... params) {
1603         logIfEnabled(FQCN, level, marker, message, params);
1604     }
1605 
1606     @Override
1607     public void log(final Level level, final Marker marker, final String message, final Throwable t) {
1608         logIfEnabled(FQCN, level, marker, message, t);
1609     }
1610 
1611     @Override
1612     public void log(final Level level, final Message msg) {
1613         logIfEnabled(FQCN, level, null, msg, msg != null ? msg.getThrowable() : null);
1614     }
1615 
1616     @Override
1617     public void log(final Level level, final Message msg, final Throwable t) {
1618         logIfEnabled(FQCN, level, null, msg, t);
1619     }
1620 
1621     @Override
1622     public void log(final Level level, final CharSequence message) {
1623         logIfEnabled(FQCN, level, null, message, null);
1624     }
1625 
1626     @Override
1627     public void log(final Level level, final CharSequence message, final Throwable t) {
1628         logIfEnabled(FQCN, level, null, message, t);
1629     }
1630 
1631     @Override
1632     public void log(final Level level, final Object message) {
1633         logIfEnabled(FQCN, level, null, message, null);
1634     }
1635 
1636     @Override
1637     public void log(final Level level, final Object message, final Throwable t) {
1638         logIfEnabled(FQCN, level, null, message, t);
1639     }
1640 
1641     @Override
1642     public void log(final Level level, final String message) {
1643         logIfEnabled(FQCN, level, null, message, (Throwable) null);
1644     }
1645 
1646     @Override
1647     public void log(final Level level, final String message, final Object... params) {
1648         logIfEnabled(FQCN, level, null, message, params);
1649     }
1650 
1651     @Override
1652     public void log(final Level level, final String message, final Throwable t) {
1653         logIfEnabled(FQCN, level, null, message, t);
1654     }
1655 
1656     @Override
1657     public void log(final Level level, final Supplier<?> msgSupplier) {
1658         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
1659     }
1660 
1661     @Override
1662     public void log(final Level level, final Supplier<?> msgSupplier, final Throwable t) {
1663         logIfEnabled(FQCN, level, null, msgSupplier, t);
1664     }
1665 
1666     @Override
1667     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier) {
1668         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
1669     }
1670 
1671     @Override
1672     public void log(final Level level, final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1673         logIfEnabled(FQCN, level, marker, message, paramSuppliers);
1674     }
1675 
1676     @Override
1677     public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1678         logIfEnabled(FQCN, level, marker, msgSupplier, t);
1679     }
1680 
1681     @Override
1682     public void log(final Level level, final String message, final Supplier<?>... paramSuppliers) {
1683         logIfEnabled(FQCN, level, null, message, paramSuppliers);
1684     }
1685 
1686     @Override
1687     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier) {
1688         logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
1689     }
1690 
1691     @Override
1692     public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1693         logIfEnabled(FQCN, level, marker, msgSupplier, t);
1694     }
1695 
1696     @Override
1697     public void log(final Level level, final MessageSupplier msgSupplier) {
1698         logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
1699     }
1700 
1701     @Override
1702     public void log(final Level level, final MessageSupplier msgSupplier, final Throwable t) {
1703         logIfEnabled(FQCN, level, null, msgSupplier, t);
1704     }
1705 
1706     @Override
1707     public void log(final Level level, final Marker marker, final String message, final Object p0) {
1708         logIfEnabled(FQCN, level, marker, message, p0);
1709     }
1710 
1711     @Override
1712     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1) {
1713         logIfEnabled(FQCN, level, marker, message, p0, p1);
1714     }
1715 
1716     @Override
1717     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1718             final Object p2) {
1719         logIfEnabled(FQCN, level, marker, message, p0, p1, p2);
1720     }
1721 
1722     @Override
1723     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1724             final Object p2, final Object p3) {
1725         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3);
1726     }
1727 
1728     @Override
1729     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1730             final Object p2, final Object p3, final Object p4) {
1731         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4);
1732     }
1733 
1734     @Override
1735     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1736             final Object p2, final Object p3, final Object p4, final Object p5) {
1737         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5);
1738     }
1739 
1740     @Override
1741     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1742             final Object p2, final Object p3, final Object p4, final Object p5, final Object p6) {
1743         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6);
1744     }
1745 
1746     @Override
1747     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1748             final Object p2, final Object p3, final Object p4, final Object p5,
1749             final Object p6, final Object p7) {
1750         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1751     }
1752 
1753     @Override
1754     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1755             final Object p2, final Object p3, final Object p4, final Object p5,
1756             final Object p6, final Object p7, final Object p8) {
1757         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1758     }
1759 
1760     @Override
1761     public void log(final Level level, final Marker marker, final String message, final Object p0, final Object p1,
1762             final Object p2, final Object p3, final Object p4, final Object p5,
1763             final Object p6, final Object p7, final Object p8, final Object p9) {
1764         logIfEnabled(FQCN, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1765     }
1766 
1767     @Override
1768     public void log(final Level level, final String message, final Object p0) {
1769         logIfEnabled(FQCN, level, null, message, p0);
1770     }
1771 
1772     @Override
1773     public void log(final Level level, final String message, final Object p0, final Object p1) {
1774         logIfEnabled(FQCN, level, null, message, p0, p1);
1775     }
1776 
1777     @Override
1778     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2) {
1779         logIfEnabled(FQCN, level, null, message, p0, p1, p2);
1780     }
1781 
1782     @Override
1783     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
1784         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3);
1785     }
1786 
1787     @Override
1788     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1789             final Object p4) {
1790         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4);
1791     }
1792 
1793     @Override
1794     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1795             final Object p4, final Object p5) {
1796         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5);
1797     }
1798 
1799     @Override
1800     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1801             final Object p4, final Object p5, final Object p6) {
1802         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6);
1803     }
1804 
1805     @Override
1806     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1807             final Object p4, final Object p5, final Object p6, final Object p7) {
1808         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
1809     }
1810 
1811     @Override
1812     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1813             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
1814         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1815     }
1816 
1817     @Override
1818     public void log(final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
1819             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
1820         logIfEnabled(FQCN, level, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1821     }
1822 
1823     @Override
1824     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
1825             final Throwable t) {
1826         if (isEnabled(level, marker, msg, t)) {
1827             logMessageSafely(fqcn, level, marker, msg, t);
1828         }
1829     }
1830 
1831     @Override
1832     public void logIfEnabled(final String fqcn, final Level level, final Marker marker,
1833             final MessageSupplier msgSupplier, final Throwable t) {
1834         if (isEnabled(level, marker, msgSupplier, t)) {
1835             logMessage(fqcn, level, marker, msgSupplier, t);
1836         }
1837     }
1838 
1839     @Override
1840     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Object message,
1841             final Throwable t) {
1842         if (isEnabled(level, marker, message, t)) {
1843             logMessage(fqcn, level, marker, message, t);
1844         }
1845     }
1846 
1847     @Override
1848     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final CharSequence message,
1849             final Throwable t) {
1850         if (isEnabled(level, marker, message, t)) {
1851             logMessage(fqcn, level, marker, message, t);
1852         }
1853     }
1854 
1855     @Override
1856     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1857             final Throwable t) {
1858         if (isEnabled(level, marker, msgSupplier, t)) {
1859             logMessage(fqcn, level, marker, msgSupplier, t);
1860         }
1861     }
1862 
1863     @Override
1864     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message) {
1865         if (isEnabled(level, marker, message)) {
1866             logMessage(fqcn, level, marker, message);
1867         }
1868     }
1869 
1870     @Override
1871     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1872             final Supplier<?>... paramSuppliers) {
1873         if (isEnabled(level, marker, message)) {
1874             logMessage(fqcn, level, marker, message, paramSuppliers);
1875         }
1876     }
1877 
1878     @Override
1879     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1880             final Object... params) {
1881         if (isEnabled(level, marker, message, params)) {
1882             logMessage(fqcn, level, marker, message, params);
1883         }
1884     }
1885 
1886     @Override
1887     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1888             final Object p0) {
1889         if (isEnabled(level, marker, message, p0)) {
1890             logMessage(fqcn, level, marker, message, p0);
1891         }
1892     }
1893 
1894     @Override
1895     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1896             final Object p0, final Object p1) {
1897         if (isEnabled(level, marker, message, p0, p1)) {
1898             logMessage(fqcn, level, marker, message, p0, p1);
1899         }
1900     }
1901 
1902     @Override
1903     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1904             final Object p0, final Object p1, final Object p2) {
1905         if (isEnabled(level, marker, message, p0, p1, p2)) {
1906             logMessage(fqcn, level, marker, message, p0, p1, p2);
1907         }
1908     }
1909 
1910     @Override
1911     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1912             final Object p0, final Object p1, final Object p2, final Object p3) {
1913         if (isEnabled(level, marker, message, p0, p1, p2, p3)) {
1914             logMessage(fqcn, level, marker, message, p0, p1, p2, p3);
1915         }
1916     }
1917 
1918     @Override
1919     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1920             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) {
1921         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4)) {
1922             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4);
1923         }
1924     }
1925 
1926     @Override
1927     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1928             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5) {
1929         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5)) {
1930             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5);
1931         }
1932     }
1933 
1934     @Override
1935     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1936             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1937             final Object p6) {
1938         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6)) {
1939             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6);
1940         }
1941     }
1942 
1943     @Override
1944     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1945             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1946             final Object p6, final Object p7) {
1947         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7)) {
1948             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
1949         }
1950     }
1951 
1952     @Override
1953     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1954             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1955             final Object p6, final Object p7, final Object p8) {
1956         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
1957             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
1958         }
1959     }
1960 
1961     @Override
1962     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1963             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
1964             final Object p6, final Object p7, final Object p8, final Object p9) {
1965         if (isEnabled(level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
1966             logMessage(fqcn, level, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1967         }
1968     }
1969 
1970     @Override
1971     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
1972             final Throwable t) {
1973         if (isEnabled(level, marker, message, t)) {
1974             logMessage(fqcn, level, marker, message, t);
1975         }
1976     }
1977 
1978     protected void logMessage(final String fqcn, final Level level, final Marker marker, final CharSequence message,
1979             final Throwable t) {
1980         logMessageSafely(fqcn, level, marker, messageFactory.newMessage(message), t);
1981     }
1982 
1983     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
1984             final Throwable t) {
1985         logMessageSafely(fqcn, level, marker, messageFactory.newMessage(message), t);
1986     }
1987 
1988     protected void logMessage(final String fqcn, final Level level, final Marker marker,
1989             final MessageSupplier msgSupplier, final Throwable t) {
1990         final Message message = LambdaUtil.get(msgSupplier);
1991         logMessageSafely(fqcn, level, marker, message, (t == null && message != null) ? message.getThrowable() : t);
1992     }
1993 
1994     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1995             final Throwable t) {
1996         final Message message = LambdaUtil.getMessage(msgSupplier, messageFactory);
1997         logMessageSafely(fqcn, level, marker, message, (t == null && message != null) ? message.getThrowable() : t);
1998     }
1999 
2000     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2001             final Throwable t) {
2002         logMessageSafely(fqcn, level, marker, messageFactory.newMessage(message), t);
2003     }
2004 
2005     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message) {
2006         final Message msg = messageFactory.newMessage(message);
2007         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2008     }
2009 
2010     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2011             final Object... params) {
2012         final Message msg = messageFactory.newMessage(message, params);
2013         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2014     }
2015 
2016     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2017             final Object p0) {
2018         final Message msg = messageFactory.newMessage(message, p0);
2019         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2020     }
2021 
2022     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2023             final Object p0, final Object p1) {
2024         final Message msg = messageFactory.newMessage(message, p0, p1);
2025         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2026     }
2027 
2028     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2029             final Object p0, final Object p1, final Object p2) {
2030         final Message msg = messageFactory.newMessage(message, p0, p1, p2);
2031         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2032     }
2033 
2034     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2035             final Object p0, final Object p1, final Object p2, final Object p3) {
2036         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3);
2037         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2038     }
2039 
2040     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2041             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) {
2042         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4);
2043         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2044     }
2045 
2046     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2047             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5) {
2048         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5);
2049         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) {
2055         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6);
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) {
2062         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
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) {
2069         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
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 Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
2075             final Object p6, final Object p7, final Object p8, final Object p9) {
2076         final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2077         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2078     }
2079 
2080     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
2081             final Supplier<?>... paramSuppliers) {
2082         final Message msg = messageFactory.newMessage(message, LambdaUtil.getAll(paramSuppliers));
2083         logMessageSafely(fqcn, level, marker, msg, msg.getThrowable());
2084     }
2085 
2086     @Override
2087     public void printf(final Level level, final Marker marker, final String format, final Object... params) {
2088         if (isEnabled(level, marker, format, params)) {
2089             final Message msg = new StringFormattedMessage(format, params);
2090             logMessageSafely(FQCN, level, marker, msg, msg.getThrowable());
2091         }
2092     }
2093 
2094     @Override
2095     public void printf(final Level level, final String format, final Object... params) {
2096         if (isEnabled(level, null, format, params)) {
2097             final Message msg = new StringFormattedMessage(format, params);
2098             logMessageSafely(FQCN, level, null, msg, msg.getThrowable());
2099         }
2100     }
2101 
2102     @PerformanceSensitive
2103     // NOTE: This is a hot method. Current implementation compiles to 30 bytes of byte code.
2104     // This is within the 35 byte MaxInlineSize threshold. Modify with care!
2105     private void logMessageSafely(final String fqcn, final Level level, final Marker marker, final Message msg,
2106             final Throwable throwable) {
2107         try {
2108             logMessageTrackRecursion(fqcn, level, marker, msg, throwable);
2109         } finally {
2110             // LOG4J2-1583 prevent scrambled logs when logging calls are nested (logging in toString())
2111             ReusableMessageFactory.release(msg);
2112         }
2113     }
2114 
2115     @PerformanceSensitive
2116     // NOTE: This is a hot method. Current implementation compiles to 29 bytes of byte code.
2117     // This is within the 35 byte MaxInlineSize threshold. Modify with care!
2118     private void logMessageTrackRecursion(final String fqcn,
2119                                           final Level level,
2120                                           final Marker marker,
2121                                           final Message msg,
2122                                           final Throwable throwable) {
2123         try {
2124             incrementRecursionDepth(); // LOG4J2-1518, LOG4J2-2031
2125             tryLogMessage(fqcn, level, marker, msg, throwable);
2126         } finally {
2127             decrementRecursionDepth();
2128         }
2129     }
2130 
2131     private static int[] getRecursionDepthHolder() {
2132         int[] result = recursionDepthHolder.get();
2133         if (result == null) {
2134             result = new int[1];
2135             recursionDepthHolder.set(result);
2136         }
2137         return result;
2138     }
2139 
2140     private static void incrementRecursionDepth() {
2141         getRecursionDepthHolder()[0]++;
2142     }
2143     private static void decrementRecursionDepth() {
2144         int[] depth = getRecursionDepthHolder();
2145         depth[0]--;
2146         if (depth[0] < 0) {
2147             throw new IllegalStateException("Recursion depth became negative: " + depth[0]);
2148         }
2149     }
2150 
2151     /**
2152      * Returns the depth of nested logging calls in the current Thread: zero if no logging call has been made,
2153      * one if a single logging call without nested logging calls has been made, or more depending on the level of
2154      * nesting.
2155      * @return the depth of the nested logging calls in the current Thread
2156      */
2157     public static int getRecursionDepth() {
2158         return getRecursionDepthHolder()[0];
2159     }
2160 
2161     @PerformanceSensitive
2162     // NOTE: This is a hot method. Current implementation compiles to 26 bytes of byte code.
2163     // This is within the 35 byte MaxInlineSize threshold. Modify with care!
2164     private void tryLogMessage(final String fqcn,
2165                                final Level level,
2166                                final Marker marker,
2167                                final Message msg,
2168                                final Throwable throwable) {
2169         try {
2170             logMessage(fqcn, level, marker, msg, throwable);
2171         } catch (final Exception e) {
2172             // LOG4J2-1990 Log4j2 suppresses all exceptions that occur once application called the logger
2173             handleLogMessageException(e, fqcn, msg);
2174         }
2175     }
2176 
2177     // LOG4J2-1990 Log4j2 suppresses all exceptions that occur once application called the logger
2178     // TODO Configuration setting to propagate exceptions back to the caller *if requested*
2179     private void handleLogMessageException(final Exception exception, final String fqcn, final Message msg) {
2180         if (exception instanceof LoggingException) {
2181             throw (LoggingException) exception;
2182         }
2183         final String format = msg.getFormat();
2184         final StringBuilder sb = new StringBuilder(format.length() + 100);
2185         sb.append(fqcn);
2186         sb.append(" caught ");
2187         sb.append(exception.getClass().getName());
2188         sb.append(" logging ");
2189         sb.append(msg.getClass().getSimpleName());
2190         sb.append(": ");
2191         sb.append(format);
2192         StatusLogger.getLogger().warn(sb.toString(), exception);
2193     }
2194 
2195     @Override
2196     public <T extends Throwable> T throwing(final T t) {
2197         return throwing(FQCN, Level.ERROR, t);
2198     }
2199 
2200     @Override
2201     public <T extends Throwable> T throwing(final Level level, final T t) {
2202         return throwing(FQCN, level, t);
2203     }
2204 
2205     /**
2206      * Logs a Throwable to be thrown.
2207      *
2208      * @param <T> the type of the Throwable.
2209      * @param fqcn the fully qualified class name of this Logger implementation.
2210      * @param level The logging Level.
2211      * @param t The Throwable.
2212      * @return the Throwable.
2213      */
2214     protected <T extends Throwable> T throwing(final String fqcn, final Level level, final T t) {
2215         if (isEnabled(level, THROWING_MARKER, (Object) null, null)) {
2216             logMessageSafely(fqcn, level, THROWING_MARKER, throwingMsg(t), t);
2217         }
2218         return t;
2219     }
2220 
2221     protected Message throwingMsg(final Throwable t) {
2222         return messageFactory.newMessage(THROWING);
2223     }
2224 
2225     @Override
2226     public void trace(final Marker marker, final Message msg) {
2227         logIfEnabled(FQCN, Level.TRACE, marker, msg, msg != null ? msg.getThrowable() : null);
2228     }
2229 
2230     @Override
2231     public void trace(final Marker marker, final Message msg, final Throwable t) {
2232         logIfEnabled(FQCN, Level.TRACE, marker, msg, t);
2233     }
2234 
2235     @Override
2236     public void trace(final Marker marker, final CharSequence message) {
2237         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
2238     }
2239 
2240     @Override
2241     public void trace(final Marker marker, final CharSequence message, final Throwable t) {
2242         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2243     }
2244 
2245     @Override
2246     public void trace(final Marker marker, final Object message) {
2247         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
2248     }
2249 
2250     @Override
2251     public void trace(final Marker marker, final Object message, final Throwable t) {
2252         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2253     }
2254 
2255     @Override
2256     public void trace(final Marker marker, final String message) {
2257         logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null);
2258     }
2259 
2260     @Override
2261     public void trace(final Marker marker, final String message, final Object... params) {
2262         logIfEnabled(FQCN, Level.TRACE, marker, message, params);
2263     }
2264 
2265     @Override
2266     public void trace(final Marker marker, final String message, final Throwable t) {
2267         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
2268     }
2269 
2270     @Override
2271     public void trace(final Message msg) {
2272         logIfEnabled(FQCN, Level.TRACE, null, msg, msg != null ? msg.getThrowable() : null);
2273     }
2274 
2275     @Override
2276     public void trace(final Message msg, final Throwable t) {
2277         logIfEnabled(FQCN, Level.TRACE, null, msg, t);
2278     }
2279 
2280     @Override
2281     public void trace(final CharSequence message) {
2282         logIfEnabled(FQCN, Level.TRACE, null, message, null);
2283     }
2284 
2285     @Override
2286     public void trace(final CharSequence message, final Throwable t) {
2287         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2288     }
2289 
2290     @Override
2291     public void trace(final Object message) {
2292         logIfEnabled(FQCN, Level.TRACE, null, message, null);
2293     }
2294 
2295     @Override
2296     public void trace(final Object message, final Throwable t) {
2297         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2298     }
2299 
2300     @Override
2301     public void trace(final String message) {
2302         logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null);
2303     }
2304 
2305     @Override
2306     public void trace(final String message, final Object... params) {
2307         logIfEnabled(FQCN, Level.TRACE, null, message, params);
2308     }
2309 
2310     @Override
2311     public void trace(final String message, final Throwable t) {
2312         logIfEnabled(FQCN, Level.TRACE, null, message, t);
2313     }
2314 
2315     @Override
2316     public void trace(final Supplier<?> msgSupplier) {
2317         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
2318     }
2319 
2320     @Override
2321     public void trace(final Supplier<?> msgSupplier, final Throwable t) {
2322         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
2323     }
2324 
2325     @Override
2326     public void trace(final Marker marker, final Supplier<?> msgSupplier) {
2327         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
2328     }
2329 
2330     @Override
2331     public void trace(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
2332         logIfEnabled(FQCN, Level.TRACE, marker, message, paramSuppliers);
2333     }
2334 
2335     @Override
2336     public void trace(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
2337         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
2338     }
2339 
2340     @Override
2341     public void trace(final String message, final Supplier<?>... paramSuppliers) {
2342         logIfEnabled(FQCN, Level.TRACE, null, message, paramSuppliers);
2343     }
2344 
2345     @Override
2346     public void trace(final Marker marker, final MessageSupplier msgSupplier) {
2347         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
2348     }
2349 
2350     @Override
2351     public void trace(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
2352         logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
2353     }
2354 
2355     @Override
2356     public void trace(final MessageSupplier msgSupplier) {
2357         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
2358     }
2359 
2360     @Override
2361     public void trace(final MessageSupplier msgSupplier, final Throwable t) {
2362         logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
2363     }
2364 
2365     @Override
2366     public void trace(final Marker marker, final String message, final Object p0) {
2367         logIfEnabled(FQCN, Level.TRACE, marker, message, p0);
2368     }
2369 
2370     @Override
2371     public void trace(final Marker marker, final String message, final Object p0, final Object p1) {
2372         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1);
2373     }
2374 
2375     @Override
2376     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
2377         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2);
2378     }
2379 
2380     @Override
2381     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2382             final Object p3) {
2383         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3);
2384     }
2385 
2386     @Override
2387     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2388             final Object p3, final Object p4) {
2389         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4);
2390     }
2391 
2392     @Override
2393     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2394             final Object p3, final Object p4, final Object p5) {
2395         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5);
2396     }
2397 
2398     @Override
2399     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2400             final Object p3, final Object p4, final Object p5, final Object p6) {
2401         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6);
2402     }
2403 
2404     @Override
2405     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2406             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
2407         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
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) {
2414         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2415     }
2416 
2417     @Override
2418     public void trace(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2419             final Object p3, final Object p4, final Object p5,
2420             final Object p6, final Object p7, final Object p8, final Object p9) {
2421         logIfEnabled(FQCN, Level.TRACE, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2422     }
2423 
2424     @Override
2425     public void trace(final String message, final Object p0) {
2426         logIfEnabled(FQCN, Level.TRACE, null, message, p0);
2427     }
2428 
2429     @Override
2430     public void trace(final String message, final Object p0, final Object p1) {
2431         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1);
2432     }
2433 
2434     @Override
2435     public void trace(final String message, final Object p0, final Object p1, final Object p2) {
2436         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2);
2437     }
2438 
2439     @Override
2440     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
2441         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3);
2442     }
2443 
2444     @Override
2445     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2446             final Object p4) {
2447         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4);
2448     }
2449 
2450     @Override
2451     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2452             final Object p4, final Object p5) {
2453         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5);
2454     }
2455 
2456     @Override
2457     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2458             final Object p4, final Object p5, final Object p6) {
2459         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6);
2460     }
2461 
2462     @Override
2463     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2464             final Object p4, final Object p5, final Object p6, final Object p7) {
2465         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
2466     }
2467 
2468     @Override
2469     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2470             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2471         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2472     }
2473 
2474     @Override
2475     public void trace(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2476             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8, final Object p9) {
2477         logIfEnabled(FQCN, Level.TRACE, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2478     }
2479 
2480     @Override
2481     public EntryMessage traceEntry() {
2482         return enter(FQCN, null, (Object[]) null);
2483     }
2484 
2485     @Override
2486     public EntryMessage traceEntry(final String format, final Object... params) {
2487         return enter(FQCN, format, params);
2488     }
2489 
2490     @Override
2491     public EntryMessage traceEntry(final Supplier<?>... paramSuppliers) {
2492         return enter(FQCN, null, paramSuppliers);
2493     }
2494 
2495     @Override
2496     public EntryMessage traceEntry(final String format, final Supplier<?>... paramSuppliers) {
2497         return enter(FQCN, format, paramSuppliers);
2498     }
2499 
2500     @Override
2501     public EntryMessage traceEntry(final Message message) {
2502         return enter(FQCN, message);
2503     }
2504 
2505     @Override
2506     public void traceExit() {
2507         exit(FQCN, null, null);
2508     }
2509 
2510     @Override
2511     public <R> R traceExit(final R result) {
2512         return exit(FQCN, null, result);
2513     }
2514 
2515     @Override
2516     public <R> R traceExit(final String format, final R result) {
2517         return exit(FQCN, format, result);
2518     }
2519 
2520     @Override
2521     public void traceExit(final EntryMessage message) {
2522         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2523         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2524             logMessageSafely(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(message), null);
2525         }
2526     }
2527 
2528     @Override
2529     public <R> R traceExit(final EntryMessage message, final R result) {
2530         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2531         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2532             logMessageSafely(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null);
2533         }
2534         return result;
2535     }
2536 
2537     @Override
2538     public <R> R traceExit(final Message message, final R result) {
2539         // If the message is null, traceEnter returned null because flow logging was disabled, we can optimize out calling isEnabled().
2540         if (message != null && isEnabled(Level.TRACE, EXIT_MARKER, message, null)) {
2541             logMessageSafely(FQCN, Level.TRACE, EXIT_MARKER, flowMessageFactory.newExitMessage(result, message), null);
2542         }
2543         return result;
2544     }
2545 
2546     @Override
2547     public void warn(final Marker marker, final Message msg) {
2548         logIfEnabled(FQCN, Level.WARN, marker, msg, msg != null ? msg.getThrowable() : null);
2549     }
2550 
2551     @Override
2552     public void warn(final Marker marker, final Message msg, final Throwable t) {
2553         logIfEnabled(FQCN, Level.WARN, marker, msg, t);
2554     }
2555 
2556     @Override
2557     public void warn(final Marker marker, final CharSequence message) {
2558         logIfEnabled(FQCN, Level.WARN, marker, message, null);
2559     }
2560 
2561     @Override
2562     public void warn(final Marker marker, final CharSequence message, final Throwable t) {
2563         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2564     }
2565 
2566     @Override
2567     public void warn(final Marker marker, final Object message) {
2568         logIfEnabled(FQCN, Level.WARN, marker, message, null);
2569     }
2570 
2571     @Override
2572     public void warn(final Marker marker, final Object message, final Throwable t) {
2573         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2574     }
2575 
2576     @Override
2577     public void warn(final Marker marker, final String message) {
2578         logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null);
2579     }
2580 
2581     @Override
2582     public void warn(final Marker marker, final String message, final Object... params) {
2583         logIfEnabled(FQCN, Level.WARN, marker, message, params);
2584     }
2585 
2586     @Override
2587     public void warn(final Marker marker, final String message, final Throwable t) {
2588         logIfEnabled(FQCN, Level.WARN, marker, message, t);
2589     }
2590 
2591     @Override
2592     public void warn(final Message msg) {
2593         logIfEnabled(FQCN, Level.WARN, null, msg, msg != null ? msg.getThrowable() : null);
2594     }
2595 
2596     @Override
2597     public void warn(final Message msg, final Throwable t) {
2598         logIfEnabled(FQCN, Level.WARN, null, msg, t);
2599     }
2600 
2601     @Override
2602     public void warn(final CharSequence message) {
2603         logIfEnabled(FQCN, Level.WARN, null, message, null);
2604     }
2605 
2606     @Override
2607     public void warn(final CharSequence message, final Throwable t) {
2608         logIfEnabled(FQCN, Level.WARN, null, message, t);
2609     }
2610 
2611     @Override
2612     public void warn(final Object message) {
2613         logIfEnabled(FQCN, Level.WARN, null, message, null);
2614     }
2615 
2616     @Override
2617     public void warn(final Object message, final Throwable t) {
2618         logIfEnabled(FQCN, Level.WARN, null, message, t);
2619     }
2620 
2621     @Override
2622     public void warn(final String message) {
2623         logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null);
2624     }
2625 
2626     @Override
2627     public void warn(final String message, final Object... params) {
2628         logIfEnabled(FQCN, Level.WARN, null, message, params);
2629     }
2630 
2631     @Override
2632     public void warn(final String message, final Throwable t) {
2633         logIfEnabled(FQCN, Level.WARN, null, message, t);
2634     }
2635 
2636     @Override
2637     public void warn(final Supplier<?> msgSupplier) {
2638         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
2639     }
2640 
2641     @Override
2642     public void warn(final Supplier<?> msgSupplier, final Throwable t) {
2643         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
2644     }
2645 
2646     @Override
2647     public void warn(final Marker marker, final Supplier<?> msgSupplier) {
2648         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
2649     }
2650 
2651     @Override
2652     public void warn(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
2653         logIfEnabled(FQCN, Level.WARN, marker, message, paramSuppliers);
2654     }
2655 
2656     @Override
2657     public void warn(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
2658         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
2659     }
2660 
2661     @Override
2662     public void warn(final String message, final Supplier<?>... paramSuppliers) {
2663         logIfEnabled(FQCN, Level.WARN, null, message, paramSuppliers);
2664     }
2665 
2666     @Override
2667     public void warn(final Marker marker, final MessageSupplier msgSupplier) {
2668         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
2669     }
2670 
2671     @Override
2672     public void warn(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
2673         logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
2674     }
2675 
2676     @Override
2677     public void warn(final MessageSupplier msgSupplier) {
2678         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
2679     }
2680 
2681     @Override
2682     public void warn(final MessageSupplier msgSupplier, final Throwable t) {
2683         logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
2684     }
2685 
2686     @Override
2687     public void warn(final Marker marker, final String message, final Object p0) {
2688         logIfEnabled(FQCN, Level.WARN, marker, message, p0);
2689     }
2690 
2691     @Override
2692     public void warn(final Marker marker, final String message, final Object p0, final Object p1) {
2693         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1);
2694     }
2695 
2696     @Override
2697     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2) {
2698         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2);
2699     }
2700 
2701     @Override
2702     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2703             final Object p3) {
2704         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3);
2705     }
2706 
2707     @Override
2708     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2709             final Object p3, final Object p4) {
2710         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4);
2711     }
2712 
2713     @Override
2714     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2715             final Object p3, final Object p4, final Object p5) {
2716         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5);
2717     }
2718 
2719     @Override
2720     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2721             final Object p3, final Object p4, final Object p5, final Object p6) {
2722         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6);
2723     }
2724 
2725     @Override
2726     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2727             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7) {
2728         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7);
2729     }
2730 
2731     @Override
2732     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2733             final Object p3, final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2734         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2735     }
2736 
2737     @Override
2738     public void warn(final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
2739             final Object p3, final Object p4, final Object p5,
2740             final Object p6, final Object p7, final Object p8, final Object p9) {
2741         logIfEnabled(FQCN, Level.WARN, marker, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2742     }
2743 
2744     @Override
2745     public void warn(final String message, final Object p0) {
2746         logIfEnabled(FQCN, Level.WARN, null, message, p0);
2747     }
2748 
2749     @Override
2750     public void warn(final String message, final Object p0, final Object p1) {
2751         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1);
2752     }
2753 
2754     @Override
2755     public void warn(final String message, final Object p0, final Object p1, final Object p2) {
2756         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2);
2757     }
2758 
2759     @Override
2760     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
2761         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3);
2762     }
2763 
2764     @Override
2765     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2766             final Object p4) {
2767         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4);
2768     }
2769 
2770     @Override
2771     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2772             final Object p4, final Object p5) {
2773         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5);
2774     }
2775 
2776     @Override
2777     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2778             final Object p4, final Object p5, final Object p6) {
2779         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6);
2780     }
2781 
2782     @Override
2783     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2784             final Object p4, final Object p5, final Object p6, final Object p7) {
2785         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7);
2786     }
2787 
2788     @Override
2789     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2790             final Object p4, final Object p5, final Object p6, final Object p7, final Object p8) {
2791         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
2792     }
2793 
2794     @Override
2795     public void warn(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
2796             final Object p4, final Object p5, final Object p6,
2797             final Object p7, final Object p8, final Object p9) {
2798         logIfEnabled(FQCN, Level.WARN, null, message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2799     }
2800 }