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