001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017package org.apache.logging.log4j.spi;
018
019import java.io.Serializable;
020
021import org.apache.logging.log4j.Level;
022import org.apache.logging.log4j.Marker;
023import org.apache.logging.log4j.MarkerManager;
024import org.apache.logging.log4j.message.DefaultFlowMessageFactory;
025import org.apache.logging.log4j.message.EntryMessage;
026import org.apache.logging.log4j.message.FlowMessageFactory;
027import org.apache.logging.log4j.message.Message;
028import org.apache.logging.log4j.message.MessageFactory;
029import org.apache.logging.log4j.message.MessageFactory2;
030import org.apache.logging.log4j.message.ParameterizedMessage;
031import org.apache.logging.log4j.message.ParameterizedMessageFactory;
032import org.apache.logging.log4j.message.ReusableMessageFactory;
033import org.apache.logging.log4j.message.SimpleMessage;
034import org.apache.logging.log4j.message.StringFormattedMessage;
035import org.apache.logging.log4j.status.StatusLogger;
036import org.apache.logging.log4j.util.Constants;
037import org.apache.logging.log4j.util.LambdaUtil;
038import org.apache.logging.log4j.util.LoaderUtil;
039import org.apache.logging.log4j.util.MessageSupplier;
040import org.apache.logging.log4j.util.PropertiesUtil;
041import org.apache.logging.log4j.util.Strings;
042import org.apache.logging.log4j.util.Supplier;
043
044/**
045 * Base implementation of a Logger. It is highly recommended that any Logger implementation extend this class.
046 */
047public abstract class AbstractLogger implements ExtendedLogger, Serializable {
048
049    /**
050     * Marker for flow tracing.
051     */
052    public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW");
053
054    /**
055     * Marker for method entry tracing.
056     */
057    public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTER").setParents(FLOW_MARKER);
058
059    /**
060     * Marker for method exit tracing.
061     */
062    public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER);
063
064    /**
065     * Marker for exception tracing.
066     */
067    public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION");
068
069    /**
070     * Marker for throwing exceptions.
071     */
072    public static final Marker THROWING_MARKER = MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER);
073
074    /**
075     * Marker for catching exceptions.
076     */
077    public static final Marker CATCHING_MARKER = MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER);
078
079    /**
080     * The default MessageFactory class.
081     */
082    public static final Class<? extends MessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS =
083            createClassForProperty("log4j2.messageFactory", ReusableMessageFactory.class,
084                    ParameterizedMessageFactory.class);
085
086    /**
087     * The default FlowMessageFactory class.
088     */
089    public static final Class<? extends FlowMessageFactory> DEFAULT_FLOW_MESSAGE_FACTORY_CLASS =
090            createFlowClassForProperty("log4j2.flowMessageFactory", DefaultFlowMessageFactory.class);
091
092    private static final long serialVersionUID = 2L;
093
094    private static final String FQCN = AbstractLogger.class.getName();
095    private static final String THROWING = "Throwing";
096    private static final String CATCHING = "Catching";
097
098    protected final String name;
099    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, 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, 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, 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, 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, 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, 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, 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, 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, (Throwable) 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, 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);
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);
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, 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, 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, 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, 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}