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