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.Message;
025import org.apache.logging.log4j.message.MessageFactory;
026import org.apache.logging.log4j.message.ParameterizedMessageFactory;
027import org.apache.logging.log4j.message.StringFormattedMessage;
028import org.apache.logging.log4j.status.StatusLogger;
029import org.apache.logging.log4j.util.LambdaUtil;
030import org.apache.logging.log4j.util.MessageSupplier;
031import org.apache.logging.log4j.util.Supplier;
032
033/**
034 * Base implementation of a Logger. It is highly recommended that any Logger implementation extend this class.
035 */
036public abstract class AbstractLogger implements ExtendedLogger, Serializable {
037
038    private static final long serialVersionUID = 2L;
039
040    /**
041     * Marker for flow tracing.
042     */
043    public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW");
044
045    /**
046     * Marker for method entry tracing.
047     */
048    public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTRY").setParents(FLOW_MARKER);
049
050    /**
051     * Marker for method exit tracing.
052     */
053    public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER);
054
055    /**
056     * Marker for exception tracing.
057     */
058    public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION");
059
060    /**
061     * Marker for throwing exceptions.
062     */
063    public static final Marker THROWING_MARKER = MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER);
064
065    /**
066     * Marker for catching exceptions.
067     */
068    public static final Marker CATCHING_MARKER = MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER);
069
070    /**
071     * The default MessageFactory class.
072     */
073    public static final Class<? extends MessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS = ParameterizedMessageFactory.class;
074
075    private static final String FQCN = AbstractLogger.class.getName();
076
077    private static final String THROWING = "throwing";
078
079    private static final String CATCHING = "catching";
080
081    /**
082     * Checks that the message factory a logger was created with is the same as the given messageFactory. If they are
083     * different log a warning to the {@linkplain StatusLogger}. A null MessageFactory translates to the default
084     * MessageFactory {@link #DEFAULT_MESSAGE_FACTORY_CLASS}.
085     *
086     * @param logger The logger to check
087     * @param messageFactory The message factory to check.
088     */
089    public static void checkMessageFactory(final ExtendedLogger logger, final MessageFactory messageFactory) {
090        final String name = logger.getName();
091        final MessageFactory loggerMessageFactory = logger.getMessageFactory();
092        if (messageFactory != null && !loggerMessageFactory.equals(messageFactory)) {
093            StatusLogger.getLogger().warn(
094                    "The Logger {} was created with the message factory {} and is now requested with the "
095                            + "message factory {}, which may create log events with unexpected formatting.", name,
096                    loggerMessageFactory, messageFactory);
097        } else if (messageFactory == null && !loggerMessageFactory.getClass().equals(DEFAULT_MESSAGE_FACTORY_CLASS)) {
098            StatusLogger
099                    .getLogger()
100                    .warn("The Logger {} was created with the message factory {} and is now requested with a null "
101                            + "message factory (defaults to {}), which may create log events with unexpected formatting.",
102                            name, loggerMessageFactory, DEFAULT_MESSAGE_FACTORY_CLASS.getName());
103        }
104    }
105
106    private final String name;
107
108    private final MessageFactory messageFactory;
109
110    /**
111     * Creates a new logger named after this class (or subclass).
112     */
113    public AbstractLogger() {
114        this.name = getClass().getName();
115        this.messageFactory = createDefaultMessageFactory();
116    }
117
118    /**
119     * Creates a new named logger.
120     *
121     * @param name the logger name
122     */
123    public AbstractLogger(final String name) {
124        this.name = name;
125        this.messageFactory = createDefaultMessageFactory();
126    }
127
128    /**
129     * Creates a new named logger with a particular {@link MessageFactory}.
130     *
131     * @param name the logger name
132     * @param messageFactory the message factory, if null then use the default message factory.
133     */
134    public AbstractLogger(final String name, final MessageFactory messageFactory) {
135        this.name = name;
136        this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : messageFactory;
137    }
138
139    @Override
140    public void catching(final Level level, final Throwable t) {
141        catching(FQCN, level, t);
142    }
143
144    /**
145     * Logs a Throwable that has been caught with location information.
146     *
147     * @param fqcn The fully qualified class name of the <b>caller</b>.
148     * @param level The logging level.
149     * @param t The Throwable.
150     */
151    protected void catching(final String fqcn, final Level level, final Throwable t) {
152        if (isEnabled(level, CATCHING_MARKER, (Object) null, null)) {
153            logMessage(fqcn, level, CATCHING_MARKER, catchingMsg(t), t);
154        }
155    }
156
157    @Override
158    public void catching(final Throwable t) {
159        if (isEnabled(Level.ERROR, CATCHING_MARKER, (Object) null, null)) {
160            logMessage(FQCN, Level.ERROR, CATCHING_MARKER, catchingMsg(t), t);
161        }
162    }
163
164    protected Message catchingMsg(final Throwable t) {
165        return messageFactory.newMessage(CATCHING);
166    }
167
168    private MessageFactory createDefaultMessageFactory() {
169        try {
170            return DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
171        } catch (final InstantiationException e) {
172            throw new IllegalStateException(e);
173        } catch (final IllegalAccessException e) {
174            throw new IllegalStateException(e);
175        }
176    }
177
178    @Override
179    public void debug(final Marker marker, final Message msg) {
180        logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
181    }
182
183    @Override
184    public void debug(final Marker marker, final Message msg, final Throwable t) {
185        logIfEnabled(FQCN, Level.DEBUG, marker, msg, t);
186    }
187
188    @Override
189    public void debug(final Marker marker, final Object message) {
190        logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
191    }
192
193    @Override
194    public void debug(final Marker marker, final Object message, final Throwable t) {
195        logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
196    }
197
198    @Override
199    public void debug(final Marker marker, final String message) {
200        logIfEnabled(FQCN, Level.DEBUG, marker, message, (Throwable) null);
201    }
202
203    @Override
204    public void debug(final Marker marker, final String message, final Object... params) {
205        logIfEnabled(FQCN, Level.DEBUG, marker, message, params);
206    }
207
208    @Override
209    public void debug(final Marker marker, final String message, final Throwable t) {
210        logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
211    }
212
213    @Override
214    public void debug(final Message msg) {
215        logIfEnabled(FQCN, Level.DEBUG, null, msg, null);
216    }
217
218    @Override
219    public void debug(final Message msg, final Throwable t) {
220        logIfEnabled(FQCN, Level.DEBUG, null, msg, t);
221    }
222
223    @Override
224    public void debug(final Object message) {
225        logIfEnabled(FQCN, Level.DEBUG, null, message, null);
226    }
227
228    @Override
229    public void debug(final Object message, final Throwable t) {
230        logIfEnabled(FQCN, Level.DEBUG, null, message, t);
231    }
232
233    @Override
234    public void debug(final String message) {
235        logIfEnabled(FQCN, Level.DEBUG, null, message, (Throwable) null);
236    }
237
238    @Override
239    public void debug(final String message, final Object... params) {
240        logIfEnabled(FQCN, Level.DEBUG, null, message, params);
241    }
242
243    @Override
244    public void debug(final String message, final Throwable t) {
245        logIfEnabled(FQCN, Level.DEBUG, null, message, t);
246    }
247
248    @Override
249    public void debug(final Supplier<?> msgSupplier) {
250        logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
251    }
252
253    @Override
254    public void debug(final Supplier<?> msgSupplier, final Throwable t) {
255        logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
256    }
257
258    @Override
259    public void debug(final Marker marker, final Supplier<?> msgSupplier) {
260        logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
261    }
262
263    @Override
264    public void debug(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
265        logIfEnabled(FQCN, Level.DEBUG, marker, message, paramSuppliers);
266    }
267
268    @Override
269    public void debug(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
270        logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
271    }
272
273    @Override
274    public void debug(final String message, final Supplier<?>... paramSuppliers) {
275        logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers);
276    }
277
278    @Override
279    public void debug(final Marker marker, final MessageSupplier msgSupplier) {
280        logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, (Throwable) null);
281    }
282
283    @Override
284    public void debug(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
285        logIfEnabled(FQCN, Level.DEBUG, marker, msgSupplier, t);
286    }
287
288    @Override
289    public void debug(final MessageSupplier msgSupplier) {
290        logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, (Throwable) null);
291    }
292
293    @Override
294    public void debug(final MessageSupplier msgSupplier, final Throwable t) {
295        logIfEnabled(FQCN, Level.DEBUG, null, msgSupplier, t);
296    }
297
298    @Override
299    public void entry() {
300        entry(FQCN);
301    }
302
303    @Override
304    public void entry(final Object... params) {
305        entry(FQCN, params);
306    }
307
308    /**
309     * Logs entry to a method with location information.
310     *
311     * @param fqcn The fully qualified class name of the <b>caller</b>.
312     * @param params The parameters to the method.
313     */
314    protected void entry(final String fqcn, final Object... params) {
315        if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
316            logIfEnabled(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(params.length, params), null);
317        }
318    }
319
320    protected Message entryMsg(final int count, final Object... params) {
321        if (count == 0) {
322            return messageFactory.newMessage("entry");
323        }
324        final StringBuilder sb = new StringBuilder("entry params(");
325        int i = 0;
326        for (final Object parm : params) {
327            if (parm != null) {
328                sb.append(parm.toString());
329            } else {
330                sb.append("null");
331            }
332            if (++i < params.length) {
333                sb.append(", ");
334            }
335        }
336        sb.append(')');
337        return messageFactory.newMessage(sb.toString());
338    }
339
340    @Override
341    public void error(final Marker marker, final Message msg) {
342        logIfEnabled(FQCN, Level.ERROR, marker, msg, null);
343    }
344
345    @Override
346    public void error(final Marker marker, final Message msg, final Throwable t) {
347        logIfEnabled(FQCN, Level.ERROR, marker, msg, t);
348    }
349
350    @Override
351    public void error(final Marker marker, final Object message) {
352        logIfEnabled(FQCN, Level.ERROR, marker, message, null);
353    }
354
355    @Override
356    public void error(final Marker marker, final Object message, final Throwable t) {
357        logIfEnabled(FQCN, Level.ERROR, marker, message, t);
358    }
359
360    @Override
361    public void error(final Marker marker, final String message) {
362        logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null);
363    }
364
365    @Override
366    public void error(final Marker marker, final String message, final Object... params) {
367        logIfEnabled(FQCN, Level.ERROR, marker, message, params);
368    }
369
370    @Override
371    public void error(final Marker marker, final String message, final Throwable t) {
372        logIfEnabled(FQCN, Level.ERROR, marker, message, t);
373    }
374
375    @Override
376    public void error(final Message msg) {
377        logIfEnabled(FQCN, Level.ERROR, null, msg, null);
378    }
379
380    @Override
381    public void error(final Message msg, final Throwable t) {
382        logIfEnabled(FQCN, Level.ERROR, null, msg, t);
383    }
384
385    @Override
386    public void error(final Object message) {
387        logIfEnabled(FQCN, Level.ERROR, null, message, null);
388    }
389
390    @Override
391    public void error(final Object message, final Throwable t) {
392        logIfEnabled(FQCN, Level.ERROR, null, message, t);
393    }
394
395    @Override
396    public void error(final String message) {
397        logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null);
398    }
399
400    @Override
401    public void error(final String message, final Object... params) {
402        logIfEnabled(FQCN, Level.ERROR, null, message, params);
403    }
404
405    @Override
406    public void error(final String message, final Throwable t) {
407        logIfEnabled(FQCN, Level.ERROR, null, message, t);
408    }
409
410    @Override
411    public void error(final Supplier<?> msgSupplier) {
412        logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
413    }
414
415    @Override
416    public void error(final Supplier<?> msgSupplier, final Throwable t) {
417        logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
418    }
419
420    @Override
421    public void error(final Marker marker, final Supplier<?> msgSupplier) {
422        logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
423    }
424
425    @Override
426    public void error(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
427        logIfEnabled(FQCN, Level.ERROR, marker, message, paramSuppliers);
428    }
429
430    @Override
431    public void error(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
432        logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
433    }
434
435    @Override
436    public void error(final String message, final Supplier<?>... paramSuppliers) {
437        logIfEnabled(FQCN, Level.ERROR, null, message, paramSuppliers);
438    }
439
440    @Override
441    public void error(final Marker marker, final MessageSupplier msgSupplier) {
442        logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, (Throwable) null);
443    }
444
445    @Override
446    public void error(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
447        logIfEnabled(FQCN, Level.ERROR, marker, msgSupplier, t);
448    }
449
450    @Override
451    public void error(final MessageSupplier msgSupplier) {
452        logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, (Throwable) null);
453    }
454
455    @Override
456    public void error(final MessageSupplier msgSupplier, final Throwable t) {
457        logIfEnabled(FQCN, Level.ERROR, null, msgSupplier, t);
458    }
459
460    @Override
461    public void exit() {
462        exit(FQCN, null);
463    }
464
465    @Override
466    public <R> R exit(final R result) {
467        return exit(FQCN, result);
468    }
469
470    /**
471     * Logs exiting from a method with the result and location information.
472     *
473     * @param fqcn The fully qualified class name of the <b>caller</b>.
474     * @param <R> The type of the parameter and object being returned.
475     * @param result The result being returned from the method call.
476     * @return the return value passed to this method.
477     */
478    protected <R> R exit(final String fqcn, final R result) {
479        if (isEnabled(Level.TRACE, EXIT_MARKER, (Object) null, null)) {
480            logIfEnabled(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(result), null);
481        }
482        return result;
483    }
484
485    protected Message exitMsg(final Object result) {
486        if (result == null) {
487            return messageFactory.newMessage("exit");
488        }
489        return messageFactory.newMessage("exit with(" + result + ')');
490    }
491
492    @Override
493    public void fatal(final Marker marker, final Message msg) {
494        logIfEnabled(FQCN, Level.FATAL, marker, msg, null);
495    }
496
497    @Override
498    public void fatal(final Marker marker, final Message msg, final Throwable t) {
499        logIfEnabled(FQCN, Level.FATAL, marker, msg, t);
500    }
501
502    @Override
503    public void fatal(final Marker marker, final Object message) {
504        logIfEnabled(FQCN, Level.FATAL, marker, message, null);
505    }
506
507    @Override
508    public void fatal(final Marker marker, final Object message, final Throwable t) {
509        logIfEnabled(FQCN, Level.FATAL, marker, message, t);
510    }
511
512    @Override
513    public void fatal(final Marker marker, final String message) {
514        logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null);
515    }
516
517    @Override
518    public void fatal(final Marker marker, final String message, final Object... params) {
519        logIfEnabled(FQCN, Level.FATAL, marker, message, params);
520    }
521
522    @Override
523    public void fatal(final Marker marker, final String message, final Throwable t) {
524        logIfEnabled(FQCN, Level.FATAL, marker, message, t);
525    }
526
527    @Override
528    public void fatal(final Message msg) {
529        logIfEnabled(FQCN, Level.FATAL, null, msg, null);
530    }
531
532    @Override
533    public void fatal(final Message msg, final Throwable t) {
534        logIfEnabled(FQCN, Level.FATAL, null, msg, t);
535    }
536
537    @Override
538    public void fatal(final Object message) {
539        logIfEnabled(FQCN, Level.FATAL, null, message, null);
540    }
541
542    @Override
543    public void fatal(final Object message, final Throwable t) {
544        logIfEnabled(FQCN, Level.FATAL, null, message, t);
545    }
546
547    @Override
548    public void fatal(final String message) {
549        logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null);
550    }
551
552    @Override
553    public void fatal(final String message, final Object... params) {
554        logIfEnabled(FQCN, Level.FATAL, null, message, params);
555    }
556
557    @Override
558    public void fatal(final String message, final Throwable t) {
559        logIfEnabled(FQCN, Level.FATAL, null, message, t);
560    }
561
562    @Override
563    public void fatal(final Supplier<?> msgSupplier) {
564        logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
565    }
566
567    @Override
568    public void fatal(final Supplier<?> msgSupplier, final Throwable t) {
569        logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
570    }
571
572    @Override
573    public void fatal(final Marker marker, final Supplier<?> msgSupplier) {
574        logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
575    }
576
577    @Override
578    public void fatal(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
579        logIfEnabled(FQCN, Level.FATAL, marker, message, paramSuppliers);
580    }
581
582    @Override
583    public void fatal(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
584        logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
585    }
586
587    @Override
588    public void fatal(final String message, final Supplier<?>... paramSuppliers) {
589        logIfEnabled(FQCN, Level.FATAL, null, message, paramSuppliers);
590    }
591
592    @Override
593    public void fatal(final Marker marker, final MessageSupplier msgSupplier) {
594        logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, (Throwable) null);
595    }
596
597    @Override
598    public void fatal(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
599        logIfEnabled(FQCN, Level.FATAL, marker, msgSupplier, t);
600    }
601
602    @Override
603    public void fatal(final MessageSupplier msgSupplier) {
604        logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, (Throwable) null);
605    }
606
607    @Override
608    public void fatal(final MessageSupplier msgSupplier, final Throwable t) {
609        logIfEnabled(FQCN, Level.FATAL, null, msgSupplier, t);
610    }
611
612    @Override
613    public MessageFactory getMessageFactory() {
614        return messageFactory;
615    }
616
617    @Override
618    public String getName() {
619        return name;
620    }
621
622    @Override
623    public void info(final Marker marker, final Message msg) {
624        logIfEnabled(FQCN, Level.INFO, marker, msg, null);
625    }
626
627    @Override
628    public void info(final Marker marker, final Message msg, final Throwable t) {
629        logIfEnabled(FQCN, Level.INFO, marker, msg, t);
630    }
631
632    @Override
633    public void info(final Marker marker, final Object message) {
634        logIfEnabled(FQCN, Level.INFO, marker, message, null);
635    }
636
637    @Override
638    public void info(final Marker marker, final Object message, final Throwable t) {
639        logIfEnabled(FQCN, Level.INFO, marker, message, t);
640    }
641
642    @Override
643    public void info(final Marker marker, final String message) {
644        logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null);
645    }
646
647    @Override
648    public void info(final Marker marker, final String message, final Object... params) {
649        logIfEnabled(FQCN, Level.INFO, marker, message, params);
650    }
651
652    @Override
653    public void info(final Marker marker, final String message, final Throwable t) {
654        logIfEnabled(FQCN, Level.INFO, marker, message, t);
655    }
656
657    @Override
658    public void info(final Message msg) {
659        logIfEnabled(FQCN, Level.INFO, null, msg, null);
660    }
661
662    @Override
663    public void info(final Message msg, final Throwable t) {
664        logIfEnabled(FQCN, Level.INFO, null, msg, t);
665    }
666
667    @Override
668    public void info(final Object message) {
669        logIfEnabled(FQCN, Level.INFO, null, message, null);
670    }
671
672    @Override
673    public void info(final Object message, final Throwable t) {
674        logIfEnabled(FQCN, Level.INFO, null, message, t);
675    }
676
677    @Override
678    public void info(final String message) {
679        logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
680    }
681
682    @Override
683    public void info(final String message, final Object... params) {
684        logIfEnabled(FQCN, Level.INFO, null, message, params);
685    }
686
687    @Override
688    public void info(final String message, final Throwable t) {
689        logIfEnabled(FQCN, Level.INFO, null, message, t);
690    }
691
692    @Override
693    public void info(final Supplier<?> msgSupplier) {
694        logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
695    }
696
697    @Override
698    public void info(final Supplier<?> msgSupplier, final Throwable t) {
699        logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
700    }
701
702    @Override
703    public void info(final Marker marker, final Supplier<?> msgSupplier) {
704        logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
705    }
706
707    @Override
708    public void info(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
709        logIfEnabled(FQCN, Level.INFO, marker, message, paramSuppliers);
710    }
711
712    @Override
713    public void info(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
714        logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
715    }
716
717    @Override
718    public void info(final String message, final Supplier<?>... paramSuppliers) {
719        logIfEnabled(FQCN, Level.INFO, null, message, paramSuppliers);
720    }
721
722    @Override
723    public void info(final Marker marker, final MessageSupplier msgSupplier) {
724        logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, (Throwable) null);
725    }
726
727    @Override
728    public void info(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
729        logIfEnabled(FQCN, Level.INFO, marker, msgSupplier, t);
730    }
731
732    @Override
733    public void info(final MessageSupplier msgSupplier) {
734        logIfEnabled(FQCN, Level.INFO, null, msgSupplier, (Throwable) null);
735    }
736
737    @Override
738    public void info(final MessageSupplier msgSupplier, final Throwable t) {
739        logIfEnabled(FQCN, Level.INFO, null, msgSupplier, t);
740    }
741
742    @Override
743    public boolean isDebugEnabled() {
744        return isEnabled(Level.DEBUG, null, null);
745    }
746
747    @Override
748    public boolean isDebugEnabled(final Marker marker) {
749        return isEnabled(Level.DEBUG, marker, (Object) null, null);
750    }
751
752    @Override
753    public boolean isEnabled(final Level level) {
754        return isEnabled(level, null, (Object) null, null);
755    }
756
757    @Override
758    public boolean isEnabled(final Level level, final Marker marker) {
759        return isEnabled(level, marker, (Object) null, null);
760    }
761
762    @Override
763    public boolean isErrorEnabled() {
764        return isEnabled(Level.ERROR, null, (Object) null, null);
765    }
766
767    @Override
768    public boolean isErrorEnabled(final Marker marker) {
769        return isEnabled(Level.ERROR, marker, (Object) null, null);
770    }
771
772    @Override
773    public boolean isFatalEnabled() {
774        return isEnabled(Level.FATAL, null, (Object) null, null);
775    }
776
777    @Override
778    public boolean isFatalEnabled(final Marker marker) {
779        return isEnabled(Level.FATAL, marker, (Object) null, null);
780    }
781
782    @Override
783    public boolean isInfoEnabled() {
784        return isEnabled(Level.INFO, null, (Object) null, null);
785    }
786
787    @Override
788    public boolean isInfoEnabled(final Marker marker) {
789        return isEnabled(Level.INFO, marker, (Object) null, null);
790    }
791
792    @Override
793    public boolean isTraceEnabled() {
794        return isEnabled(Level.TRACE, null, (Object) null, null);
795    }
796
797    @Override
798    public boolean isTraceEnabled(final Marker marker) {
799        return isEnabled(Level.TRACE, marker, (Object) null, null);
800    }
801
802    @Override
803    public boolean isWarnEnabled() {
804        return isEnabled(Level.WARN, null, (Object) null, null);
805    }
806
807    @Override
808    public boolean isWarnEnabled(final Marker marker) {
809        return isEnabled(Level.WARN, marker, (Object) null, null);
810    }
811
812    @Override
813    public void log(final Level level, final Marker marker, final Message msg) {
814        logIfEnabled(FQCN, level, marker, msg, (Throwable) null);
815    }
816
817    @Override
818    public void log(final Level level, final Marker marker, final Message msg, final Throwable t) {
819        logIfEnabled(FQCN, level, marker, msg, t);
820    }
821
822    @Override
823    public void log(final Level level, final Marker marker, final Object message) {
824        logIfEnabled(FQCN, level, marker, message, (Throwable) null);
825    }
826
827    @Override
828    public void log(final Level level, final Marker marker, final Object message, final Throwable t) {
829        if (isEnabled(level, marker, message, t)) {
830            logMessage(FQCN, level, marker, message, t);
831        }
832    }
833
834    @Override
835    public void log(final Level level, final Marker marker, final String message) {
836        logIfEnabled(FQCN, level, marker, message, (Throwable) null);
837    }
838
839    @Override
840    public void log(final Level level, final Marker marker, final String message, final Object... params) {
841        logIfEnabled(FQCN, level, marker, message, params);
842    }
843
844    @Override
845    public void log(final Level level, final Marker marker, final String message, final Throwable t) {
846        logIfEnabled(FQCN, level, marker, message, t);
847    }
848
849    @Override
850    public void log(final Level level, final Message msg) {
851        logIfEnabled(FQCN, level, null, msg, null);
852    }
853
854    @Override
855    public void log(final Level level, final Message msg, final Throwable t) {
856        logIfEnabled(FQCN, level, null, msg, t);
857    }
858
859    @Override
860    public void log(final Level level, final Object message) {
861        logIfEnabled(FQCN, level, null, message, null);
862    }
863
864    @Override
865    public void log(final Level level, final Object message, final Throwable t) {
866        logIfEnabled(FQCN, level, null, message, t);
867    }
868
869    @Override
870    public void log(final Level level, final String message) {
871        logIfEnabled(FQCN, level, null, message, (Throwable) null);
872    }
873
874    @Override
875    public void log(final Level level, final String message, final Object... params) {
876        logIfEnabled(FQCN, level, null, message, params);
877    }
878
879    @Override
880    public void log(final Level level, final String message, final Throwable t) {
881        logIfEnabled(FQCN, level, null, message, t);
882    }
883
884    @Override
885    public void log(final Level level, final Supplier<?> msgSupplier) {
886        logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
887    }
888
889    @Override
890    public void log(final Level level, final Supplier<?> msgSupplier, final Throwable t) {
891        logIfEnabled(FQCN, level, null, msgSupplier, t);
892    }
893
894    @Override
895    public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier) {
896        logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
897    }
898
899    @Override
900    public void log(final Level level, final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
901        logIfEnabled(FQCN, level, marker, message, paramSuppliers);
902    }
903
904    @Override
905    public void log(final Level level, final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
906        logIfEnabled(FQCN, level, marker, msgSupplier, t);
907    }
908
909    @Override
910    public void log(final Level level, final String message, final Supplier<?>... paramSuppliers) {
911        logIfEnabled(FQCN, level, null, message, paramSuppliers);
912    }
913
914    @Override
915    public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier) {
916        logIfEnabled(FQCN, level, marker, msgSupplier, (Throwable) null);
917    }
918
919    @Override
920    public void log(final Level level, final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
921        logIfEnabled(FQCN, level, marker, msgSupplier, t);
922    }
923
924    @Override
925    public void log(final Level level, final MessageSupplier msgSupplier) {
926        logIfEnabled(FQCN, level, null, msgSupplier, (Throwable) null);
927    }
928
929    @Override
930    public void log(final Level level, final MessageSupplier msgSupplier, final Throwable t) {
931        logIfEnabled(FQCN, level, null, msgSupplier, t);
932    }
933
934    @Override
935    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
936            final Throwable t) {
937        if (isEnabled(level, marker, msg, t)) {
938            logMessage(fqcn, level, marker, msg, t);
939        }
940    }
941
942    @Override
943    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, 
944            final MessageSupplier msgSupplier, final Throwable t) {
945        if (isEnabled(level, marker, msgSupplier, t)) {
946            logMessage(fqcn, level, marker, msgSupplier, t);
947        }
948    }
949
950    @Override
951    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Object message,
952            final Throwable t) {
953        if (isEnabled(level, marker, message, t)) {
954            logMessage(fqcn, level, marker, message, t);
955        }
956    }
957
958    @Override
959    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
960            final Throwable t) {
961        if (isEnabled(level, marker, msgSupplier, t)) {
962            logMessage(fqcn, level, marker, msgSupplier, t);
963        }
964    }
965
966    @Override
967    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message) {
968        if (isEnabled(level, marker, message)) {
969            logMessage(fqcn, level, marker, message);
970        }
971    }
972
973    @Override
974    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
975            final Supplier<?>... paramSuppliers) {
976        if (isEnabled(level, marker, message)) {
977            logMessage(fqcn, level, marker, message, paramSuppliers);
978        }
979    }
980
981    @Override
982    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
983            final Object... params) {
984        if (isEnabled(level, marker, message, params)) {
985            logMessage(fqcn, level, marker, message, params);
986        }
987    }
988
989    @Override
990    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
991            final Throwable t) {
992        if (isEnabled(level, marker, message, t)) {
993            logMessage(fqcn, level, marker, message, t);
994        }
995    }
996
997    protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
998            final Throwable t) {
999        logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1000    }
1001
1002    protected void logMessage(final String fqcn, final Level level, final Marker marker,
1003            final MessageSupplier msgSupplier, final Throwable t) {
1004        final Message message = LambdaUtil.get(msgSupplier);
1005        logMessage(fqcn, level, marker, message, t);
1006    }
1007
1008    protected void logMessage(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
1009            final Throwable t) {
1010        final Object message = LambdaUtil.get(msgSupplier);
1011        logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1012    }
1013
1014    protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1015            final Throwable t) {
1016        logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
1017    }
1018
1019    protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message) {
1020        final Message msg = messageFactory.newMessage(message);
1021        logMessage(fqcn, level, marker, msg, msg.getThrowable());
1022    }
1023
1024    protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1025            final Object... params) {
1026        final Message msg = messageFactory.newMessage(message, params);
1027        logMessage(fqcn, level, marker, msg, msg.getThrowable());
1028    }
1029
1030    protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
1031            final Supplier<?>... paramSuppliers) {
1032        final Message msg = messageFactory.newMessage(message, LambdaUtil.getAll(paramSuppliers));
1033        logMessage(fqcn, level, marker, msg, msg.getThrowable());
1034    }
1035
1036    @Override
1037    public void printf(final Level level, final Marker marker, final String format, final Object... params) {
1038        if (isEnabled(level, marker, format, params)) {
1039            final Message msg = new StringFormattedMessage(format, params);
1040            logMessage(FQCN, level, marker, msg, msg.getThrowable());
1041        }
1042    }
1043
1044    @Override
1045    public void printf(final Level level, final String format, final Object... params) {
1046        if (isEnabled(level, null, format, params)) {
1047            final Message msg = new StringFormattedMessage(format, params);
1048            logMessage(FQCN, level, null, msg, msg.getThrowable());
1049        }
1050    }
1051
1052    @Override
1053    public <T extends Throwable> T throwing(final T t) {
1054        return throwing(FQCN, Level.ERROR, t);
1055    }
1056
1057    @Override
1058    public <T extends Throwable> T throwing(final Level level, final T t) {
1059        return throwing(FQCN, level, t);
1060    }
1061
1062    /**
1063     * Logs a Throwable to be thrown.
1064     *
1065     * @param <T> the type of the Throwable.
1066     * @param fqcn the fully qualified class name of this Logger implementation.
1067     * @param level The logging Level.
1068     * @param t The Throwable.
1069     * @return the Throwable.
1070     */
1071    protected <T extends Throwable> T throwing(final String fqcn, final Level level, final T t) {
1072        if (isEnabled(level, THROWING_MARKER, (Object) null, null)) {
1073            logMessage(fqcn, level, THROWING_MARKER, throwingMsg(t), t);
1074        }
1075        return t;
1076    }
1077
1078    protected Message throwingMsg(final Throwable t) {
1079        return messageFactory.newMessage(THROWING);
1080    }
1081
1082    @Override
1083    public void trace(final Marker marker, final Message msg) {
1084        logIfEnabled(FQCN, Level.TRACE, marker, msg, null);
1085    }
1086
1087    @Override
1088    public void trace(final Marker marker, final Message msg, final Throwable t) {
1089        logIfEnabled(FQCN, Level.TRACE, marker, msg, t);
1090    }
1091
1092    @Override
1093    public void trace(final Marker marker, final Object message) {
1094        logIfEnabled(FQCN, Level.TRACE, marker, message, null);
1095    }
1096
1097    @Override
1098    public void trace(final Marker marker, final Object message, final Throwable t) {
1099        logIfEnabled(FQCN, Level.TRACE, marker, message, t);
1100    }
1101
1102    @Override
1103    public void trace(final Marker marker, final String message) {
1104        logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null);
1105    }
1106
1107    @Override
1108    public void trace(final Marker marker, final String message, final Object... params) {
1109        logIfEnabled(FQCN, Level.TRACE, marker, message, params);
1110    }
1111
1112    @Override
1113    public void trace(final Marker marker, final String message, final Throwable t) {
1114        logIfEnabled(FQCN, Level.TRACE, marker, message, t);
1115    }
1116
1117    @Override
1118    public void trace(final Message msg) {
1119        logIfEnabled(FQCN, Level.TRACE, null, msg, null);
1120    }
1121
1122    @Override
1123    public void trace(final Message msg, final Throwable t) {
1124        logIfEnabled(FQCN, Level.TRACE, null, msg, t);
1125    }
1126
1127    @Override
1128    public void trace(final Object message) {
1129        logIfEnabled(FQCN, Level.TRACE, null, message, null);
1130    }
1131
1132    @Override
1133    public void trace(final Object message, final Throwable t) {
1134        logIfEnabled(FQCN, Level.TRACE, null, message, t);
1135    }
1136
1137    @Override
1138    public void trace(final String message) {
1139        logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null);
1140    }
1141
1142    @Override
1143    public void trace(final String message, final Object... params) {
1144        logIfEnabled(FQCN, Level.TRACE, null, message, params);
1145    }
1146
1147    @Override
1148    public void trace(final String message, final Throwable t) {
1149        logIfEnabled(FQCN, Level.TRACE, null, message, t);
1150    }
1151
1152    @Override
1153    public void trace(final Supplier<?> msgSupplier) {
1154        logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
1155    }
1156
1157    @Override
1158    public void trace(final Supplier<?> msgSupplier, final Throwable t) {
1159        logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
1160    }
1161
1162    @Override
1163    public void trace(final Marker marker, final Supplier<?> msgSupplier) {
1164        logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
1165    }
1166
1167    @Override
1168    public void trace(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1169        logIfEnabled(FQCN, Level.TRACE, marker, message, paramSuppliers);
1170    }
1171
1172    @Override
1173    public void trace(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1174        logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
1175    }
1176
1177    @Override
1178    public void trace(final String message, final Supplier<?>... paramSuppliers) {
1179        logIfEnabled(FQCN, Level.TRACE, null, message, paramSuppliers);
1180    }
1181
1182    @Override
1183    public void trace(final Marker marker, final MessageSupplier msgSupplier) {
1184        logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, (Throwable) null);
1185    }
1186
1187    @Override
1188    public void trace(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1189        logIfEnabled(FQCN, Level.TRACE, marker, msgSupplier, t);
1190    }
1191
1192    @Override
1193    public void trace(final MessageSupplier msgSupplier) {
1194        logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, (Throwable) null);
1195    }
1196
1197    @Override
1198    public void trace(final MessageSupplier msgSupplier, final Throwable t) {
1199        logIfEnabled(FQCN, Level.TRACE, null, msgSupplier, t);
1200    }
1201
1202    @Override
1203    public void warn(final Marker marker, final Message msg) {
1204        logIfEnabled(FQCN, Level.WARN, marker, msg, null);
1205    }
1206
1207    @Override
1208    public void warn(final Marker marker, final Message msg, final Throwable t) {
1209        logIfEnabled(FQCN, Level.WARN, marker, msg, t);
1210    }
1211
1212    @Override
1213    public void warn(final Marker marker, final Object message) {
1214        logIfEnabled(FQCN, Level.WARN, marker, message, null);
1215    }
1216
1217    @Override
1218    public void warn(final Marker marker, final Object message, final Throwable t) {
1219        logIfEnabled(FQCN, Level.WARN, marker, message, t);
1220    }
1221
1222    @Override
1223    public void warn(final Marker marker, final String message) {
1224        logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null);
1225    }
1226
1227    @Override
1228    public void warn(final Marker marker, final String message, final Object... params) {
1229        logIfEnabled(FQCN, Level.WARN, marker, message, params);
1230    }
1231
1232    @Override
1233    public void warn(final Marker marker, final String message, final Throwable t) {
1234        logIfEnabled(FQCN, Level.WARN, marker, message, t);
1235    }
1236
1237    @Override
1238    public void warn(final Message msg) {
1239        logIfEnabled(FQCN, Level.WARN, null, msg, null);
1240    }
1241
1242    @Override
1243    public void warn(final Message msg, final Throwable t) {
1244        logIfEnabled(FQCN, Level.WARN, null, msg, t);
1245    }
1246
1247    @Override
1248    public void warn(final Object message) {
1249        logIfEnabled(FQCN, Level.WARN, null, message, null);
1250    }
1251
1252    @Override
1253    public void warn(final Object message, final Throwable t) {
1254        logIfEnabled(FQCN, Level.WARN, null, message, t);
1255    }
1256
1257    @Override
1258    public void warn(final String message) {
1259        logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null);
1260    }
1261
1262    @Override
1263    public void warn(final String message, final Object... params) {
1264        logIfEnabled(FQCN, Level.WARN, null, message, params);
1265    }
1266
1267    @Override
1268    public void warn(final String message, final Throwable t) {
1269        logIfEnabled(FQCN, Level.WARN, null, message, t);
1270    }
1271
1272    @Override
1273    public void warn(final Supplier<?> msgSupplier) {
1274        logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
1275    }
1276
1277    @Override
1278    public void warn(final Supplier<?> msgSupplier, final Throwable t) {
1279        logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
1280    }
1281
1282    @Override
1283    public void warn(final Marker marker, final Supplier<?> msgSupplier) {
1284        logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
1285    }
1286
1287    @Override
1288    public void warn(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
1289        logIfEnabled(FQCN, Level.WARN, marker, message, paramSuppliers);
1290    }
1291
1292    @Override
1293    public void warn(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
1294        logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
1295    }
1296
1297    @Override
1298    public void warn(final String message, final Supplier<?>... paramSuppliers) {
1299        logIfEnabled(FQCN, Level.WARN, null, message, paramSuppliers);
1300    }
1301
1302    @Override
1303    public void warn(final Marker marker, final MessageSupplier msgSupplier) {
1304        logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, (Throwable) null);
1305    }
1306
1307    @Override
1308    public void warn(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
1309        logIfEnabled(FQCN, Level.WARN, marker, msgSupplier, t);
1310    }
1311
1312    @Override
1313    public void warn(final MessageSupplier msgSupplier) {
1314        logIfEnabled(FQCN, Level.WARN, null, msgSupplier, (Throwable) null);
1315    }
1316
1317    @Override
1318    public void warn(final MessageSupplier msgSupplier, final Throwable t) {
1319        logIfEnabled(FQCN, Level.WARN, null, msgSupplier, t);
1320    }
1321}