View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.spi;
    18
    19  import java.io.Serializable;
    20
    21  import org.apache.logging.log4j.Level;
    22  import org.apache.logging.log4j.Marker;
    23  import org.apache.logging.log4j.MarkerManager;
    24  import org.apache.logging.log4j.message.Message;
    25  import org.apache.logging.log4j.message.MessageFactory;
    26  import org.apache.logging.log4j.message.ParameterizedMessageFactory;
    27  import org.apache.logging.log4j.message.StringFormattedMessage;
    28  import org.apache.logging.log4j.status.StatusLogger;
    29
    30  /**
    31   * Base implementation of a Logger. It is highly recommended that any Logger implementation extend this class.
    32   */
    33  public abstract class AbstractLogger implements ExtendedLogger, Serializable {
    34
    35      private static final long serialVersionUID = 2L;
    36
    37      /**
    38       * Marker for flow tracing.
    39       */
    40      public static final Marker FLOW_MARKER = MarkerManager.getMarker("FLOW");
    41
    42      /**
    43       * Marker for method entry tracing.
    44       */
    45      public static final Marker ENTRY_MARKER = MarkerManager.getMarker("ENTRY").setParents(FLOW_MARKER);
    46
    47      /**
    48       * Marker for method exit tracing.
    49       */
    50      public static final Marker EXIT_MARKER = MarkerManager.getMarker("EXIT").setParents(FLOW_MARKER);
    51
    52      /**
    53       * Marker for exception tracing.
    54       */
    55      public static final Marker EXCEPTION_MARKER = MarkerManager.getMarker("EXCEPTION");
    56
    57      /**
    58       * Marker for throwing exceptions.
    59       */
    60      public static final Marker THROWING_MARKER = MarkerManager.getMarker("THROWING").setParents(EXCEPTION_MARKER);
    61
    62      /**
    63       * Marker for catching exceptions.
    64       */
    65      public static final Marker CATCHING_MARKER = MarkerManager.getMarker("CATCHING").setParents(EXCEPTION_MARKER);
    66
    67      /**
    68       * The default MessageFactory class.
    69       */
    70      public static final Class<? extends MessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS = ParameterizedMessageFactory.class;
    71
    72      private static final String FQCN = AbstractLogger.class.getName();
    73
    74      private static final String THROWING = "throwing";
    75
    76      private static final String CATCHING = "catching";
    77
    78      /**
    79       * Checks that the message factory a logger was created with is the same as the given messageFactory. If they are
    80       * different log a warning to the {@linkplain StatusLogger}. A null MessageFactory translates to the default
    81       * MessageFactory {@link #DEFAULT_MESSAGE_FACTORY_CLASS}.
    82       *
    83       * @param logger The logger to check
    84       * @param messageFactory The message factory to check.
    85       */
    86      public static void checkMessageFactory(final ExtendedLogger logger, final MessageFactory messageFactory) {
    87          final String name = logger.getName();
    88          final MessageFactory loggerMessageFactory = logger.getMessageFactory();
    89          if (messageFactory != null && !loggerMessageFactory.equals(messageFactory)) {
    90              StatusLogger.getLogger().warn(
    91                      "The Logger {} was created with the message factory {} and is now requested with the "
    92                              + "message factory {}, which may create log events with unexpected formatting.", name,
    93                      loggerMessageFactory, messageFactory);
    94          } else if (messageFactory == null && !loggerMessageFactory.getClass().equals(DEFAULT_MESSAGE_FACTORY_CLASS)) {
    95              StatusLogger
    96                      .getLogger()
    97                      .warn("The Logger {} was created with the message factory {} and is now requested with a null "
    98                              + "message factory (defaults to {}), which may create log events with unexpected formatting.",
    99                              name, loggerMessageFactory, DEFAULT_MESSAGE_FACTORY_CLASS.getName());
    100         }
    101     }
    102
    103     private final String name;
    104
    105     private final MessageFactory messageFactory;
    106
    107     /**
    108      * Creates a new logger named after this class (or subclass).
    109      */
    110     public AbstractLogger() {
    111         this.name = getClass().getName();
    112         this.messageFactory = createDefaultMessageFactory();
    113     }
    114
    115     /**
    116      * Creates a new named logger.
    117      *
    118      * @param name the logger name
    119      */
    120     public AbstractLogger(final String name) {
    121         this.name = name;
    122         this.messageFactory = createDefaultMessageFactory();
    123     }
    124
    125     /**
    126      * Creates a new named logger with a particular {@link MessageFactory}.
    127      *
    128      * @param name the logger name
    129      * @param messageFactory the message factory, if null then use the default message factory.
    130      */
    131     public AbstractLogger(final String name, final MessageFactory messageFactory) {
    132         this.name = name;
    133         this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : messageFactory;
    134     }
    135
    136     @Override
    137     public void catching(final Level level, final Throwable t) {
    138         catching(FQCN, level, t);
    139     }
    140
    141     /**
    142      * Logs a Throwable that has been caught with location information.
    143      *
    144      * @param fqcn The fully qualified class name of the <b>caller</b>.
    145      * @param level The logging level.
    146      * @param t The Throwable.
    147      */
    148     protected void catching(final String fqcn, final Level level, final Throwable t) {
    149         if (isEnabled(level, CATCHING_MARKER, (Object) null, null)) {
    150             logMessage(fqcn, level, CATCHING_MARKER, catchingMsg(t), t);
    151         }
    152     }
    153
    154     @Override
    155     public void catching(final Throwable t) {
    156         if (isEnabled(Level.ERROR, CATCHING_MARKER, (Object) null, null)) {
    157             logMessage(FQCN, Level.ERROR, CATCHING_MARKER, catchingMsg(t), t);
    158         }
    159     }
    160
    161     protected Message catchingMsg(final Throwable t) {
    162         return messageFactory.newMessage(CATCHING);
    163     }
    164
    165     private MessageFactory createDefaultMessageFactory() {
    166         try {
    167             return DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
    168         } catch (final InstantiationException e) {
    169             throw new IllegalStateException(e);
    170         } catch (final IllegalAccessException e) {
    171             throw new IllegalStateException(e);
    172         }
    173     }
    174
    175     @Override
    176     public void debug(final Marker marker, final Message msg) {
    177         logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
    178     }
    179
    180     @Override
    181     public void debug(final Marker marker, final Message msg, final Throwable t) {
    182         logIfEnabled(FQCN, Level.DEBUG, marker, msg, t);
    183     }
    184
    185     @Override
    186     public void debug(final Marker marker, final Object message) {
    187         logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
    188     }
    189
    190     @Override
    191     public void debug(final Marker marker, final Object message, final Throwable t) {
    192         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
    193     }
    194
    195     @Override
    196     public void debug(final Marker marker, final String message) {
    197         logIfEnabled(FQCN, Level.DEBUG, marker, message, (Throwable) null);
    198     }
    199
    200     @Override
    201     public void debug(final Marker marker, final String message, final Object... params) {
    202         logIfEnabled(FQCN, Level.DEBUG, marker, message, params);
    203     }
    204
    205     @Override
    206     public void debug(final Marker marker, final String message, final Throwable t) {
    207         logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
    208     }
    209
    210     @Override
    211     public void debug(final Message msg) {
    212         logIfEnabled(FQCN, Level.DEBUG, null, msg, null);
    213     }
    214
    215     @Override
    216     public void debug(final Message msg, final Throwable t) {
    217         logIfEnabled(FQCN, Level.DEBUG, null, msg, t);
    218     }
    219
    220     @Override
    221     public void debug(final Object message) {
    222         logIfEnabled(FQCN, Level.DEBUG, null, message, null);
    223     }
    224
    225     @Override
    226     public void debug(final Object message, final Throwable t) {
    227         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
    228     }
    229
    230     @Override
    231     public void debug(final String message) {
    232         logIfEnabled(FQCN, Level.DEBUG, null, message, (Throwable) null);
    233     }
    234
    235     @Override
    236     public void debug(final String message, final Object... params) {
    237         logIfEnabled(FQCN, Level.DEBUG, null, message, params);
    238     }
    239
    240     @Override
    241     public void debug(final String message, final Throwable t) {
    242         logIfEnabled(FQCN, Level.DEBUG, null, message, t);
    243     }
    244
    245     @Override
    246     public void entry() {
    247         entry(FQCN);
    248     }
    249
    250     @Override
    251     public void entry(final Object... params) {
    252         entry(FQCN, params);
    253     }
    254
    255     /**
    256      * Logs entry to a method with location information.
    257      *
    258      * @param fqcn The fully qualified class name of the <b>caller</b>.
    259      * @param params The parameters to the method.
    260      */
    261     protected void entry(final String fqcn, final Object... params) {
    262         if (isEnabled(Level.TRACE, ENTRY_MARKER, (Object) null, null)) {
    263             logIfEnabled(fqcn, Level.TRACE, ENTRY_MARKER, entryMsg(params.length, params), null);
    264         }
    265     }
    266
    267     protected Message entryMsg(final int count, final Object... params) {
    268         if (count == 0) {
    269             return messageFactory.newMessage("entry");
    270         }
    271         final StringBuilder sb = new StringBuilder("entry params(");
    272         int i = 0;
    273         for (final Object parm : params) {
    274             if (parm != null) {
    275                 sb.append(parm.toString());
    276             } else {
    277                 sb.append("null");
    278             }
    279             if (++i < params.length) {
    280                 sb.append(", ");
    281             }
    282         }
    283         sb.append(')');
    284         return messageFactory.newMessage(sb.toString());
    285     }
    286
    287     @Override
    288     public void error(final Marker marker, final Message msg) {
    289         logIfEnabled(FQCN, Level.ERROR, marker, msg, null);
    290     }
    291
    292     @Override
    293     public void error(final Marker marker, final Message msg, final Throwable t) {
    294         logIfEnabled(FQCN, Level.ERROR, marker, msg, t);
    295     }
    296
    297     @Override
    298     public void error(final Marker marker, final Object message) {
    299         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
    300     }
    301
    302     @Override
    303     public void error(final Marker marker, final Object message, final Throwable t) {
    304         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
    305     }
    306
    307     @Override
    308     public void error(final Marker marker, final String message) {
    309         logIfEnabled(FQCN, Level.ERROR, marker, message, (Throwable) null);
    310     }
    311
    312     @Override
    313     public void error(final Marker marker, final String message, final Object... params) {
    314         logIfEnabled(FQCN, Level.ERROR, marker, message, params);
    315     }
    316
    317     @Override
    318     public void error(final Marker marker, final String message, final Throwable t) {
    319         logIfEnabled(FQCN, Level.ERROR, marker, message, t);
    320     }
    321
    322     @Override
    323     public void error(final Message msg) {
    324         logIfEnabled(FQCN, Level.ERROR, null, msg, null);
    325     }
    326
    327     @Override
    328     public void error(final Message msg, final Throwable t) {
    329         logIfEnabled(FQCN, Level.ERROR, null, msg, t);
    330     }
    331
    332     @Override
    333     public void error(final Object message) {
    334         logIfEnabled(FQCN, Level.ERROR, null, message, null);
    335     }
    336
    337     @Override
    338     public void error(final Object message, final Throwable t) {
    339         logIfEnabled(FQCN, Level.ERROR, null, message, t);
    340     }
    341
    342     @Override
    343     public void error(final String message) {
    344         logIfEnabled(FQCN, Level.ERROR, null, message, (Throwable) null);
    345     }
    346
    347     @Override
    348     public void error(final String message, final Object... params) {
    349         logIfEnabled(FQCN, Level.ERROR, null, message, params);
    350     }
    351
    352     @Override
    353     public void error(final String message, final Throwable t) {
    354         logIfEnabled(FQCN, Level.ERROR, null, message, t);
    355     }
    356
    357     @Override
    358     public void exit() {
    359         exit(FQCN, null);
    360     }
    361
    362     @Override
    363     public <R> R exit(final R result) {
    364         return exit(FQCN, result);
    365     }
    366
    367     /**
    368      * Logs exiting from a method with the result and location information.
    369      *
    370      * @param fqcn The fully qualified class name of the <b>caller</b>.
    371      * @param <R> The type of the parameter and object being returned.
    372      * @param result The result being returned from the method call.
    373      * @return the return value passed to this method.
    374      */
    375     protected <R> R exit(final String fqcn, final R result) {
    376         if (isEnabled(Level.TRACE, EXIT_MARKER, (Object) null, null)) {
    377             logIfEnabled(fqcn, Level.TRACE, EXIT_MARKER, exitMsg(result), null);
    378         }
    379         return result;
    380     }
    381
    382     protected Message exitMsg(final Object result) {
    383         if (result == null) {
    384             return messageFactory.newMessage("exit");
    385         }
    386         return messageFactory.newMessage("exit with(" + result + ')');
    387     }
    388
    389     @Override
    390     public void fatal(final Marker marker, final Message msg) {
    391         logIfEnabled(FQCN, Level.FATAL, marker, msg, null);
    392     }
    393
    394     @Override
    395     public void fatal(final Marker marker, final Message msg, final Throwable t) {
    396         logIfEnabled(FQCN, Level.FATAL, marker, msg, t);
    397     }
    398
    399     @Override
    400     public void fatal(final Marker marker, final Object message) {
    401         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
    402     }
    403
    404     @Override
    405     public void fatal(final Marker marker, final Object message, final Throwable t) {
    406         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
    407     }
    408
    409     @Override
    410     public void fatal(final Marker marker, final String message) {
    411         logIfEnabled(FQCN, Level.FATAL, marker, message, (Throwable) null);
    412     }
    413
    414     @Override
    415     public void fatal(final Marker marker, final String message, final Object... params) {
    416         logIfEnabled(FQCN, Level.FATAL, marker, message, params);
    417     }
    418
    419     @Override
    420     public void fatal(final Marker marker, final String message, final Throwable t) {
    421         logIfEnabled(FQCN, Level.FATAL, marker, message, t);
    422     }
    423
    424     @Override
    425     public void fatal(final Message msg) {
    426         logIfEnabled(FQCN, Level.FATAL, null, msg, null);
    427     }
    428
    429     @Override
    430     public void fatal(final Message msg, final Throwable t) {
    431         logIfEnabled(FQCN, Level.FATAL, null, msg, t);
    432     }
    433
    434     @Override
    435     public void fatal(final Object message) {
    436         logIfEnabled(FQCN, Level.FATAL, null, message, null);
    437     }
    438
    439     @Override
    440     public void fatal(final Object message, final Throwable t) {
    441         logIfEnabled(FQCN, Level.FATAL, null, message, t);
    442     }
    443
    444     @Override
    445     public void fatal(final String message) {
    446         logIfEnabled(FQCN, Level.FATAL, null, message, (Throwable) null);
    447     }
    448
    449     @Override
    450     public void fatal(final String message, final Object... params) {
    451         logIfEnabled(FQCN, Level.FATAL, null, message, params);
    452     }
    453
    454     @Override
    455     public void fatal(final String message, final Throwable t) {
    456         logIfEnabled(FQCN, Level.FATAL, null, message, t);
    457     }
    458
    459     @Override
    460     public MessageFactory getMessageFactory() {
    461         return messageFactory;
    462     }
    463
    464     @Override
    465     public String getName() {
    466         return name;
    467     }
    468
    469     @Override
    470     public void info(final Marker marker, final Message msg) {
    471         logIfEnabled(FQCN, Level.INFO, marker, msg, null);
    472     }
    473
    474     @Override
    475     public void info(final Marker marker, final Message msg, final Throwable t) {
    476         logIfEnabled(FQCN, Level.INFO, marker, msg, t);
    477     }
    478
    479     @Override
    480     public void info(final Marker marker, final Object message) {
    481         logIfEnabled(FQCN, Level.INFO, marker, message, null);
    482     }
    483
    484     @Override
    485     public void info(final Marker marker, final Object message, final Throwable t) {
    486         logIfEnabled(FQCN, Level.INFO, marker, message, t);
    487     }
    488
    489     @Override
    490     public void info(final Marker marker, final String message) {
    491         logIfEnabled(FQCN, Level.INFO, marker, message, (Throwable) null);
    492     }
    493
    494     @Override
    495     public void info(final Marker marker, final String message, final Object... params) {
    496         logIfEnabled(FQCN, Level.INFO, marker, message, params);
    497     }
    498
    499     @Override
    500     public void info(final Marker marker, final String message, final Throwable t) {
    501         logIfEnabled(FQCN, Level.INFO, marker, message, t);
    502     }
    503
    504     @Override
    505     public void info(final Message msg) {
    506         logIfEnabled(FQCN, Level.INFO, null, msg, null);
    507     }
    508
    509     @Override
    510     public void info(final Message msg, final Throwable t) {
    511         logIfEnabled(FQCN, Level.INFO, null, msg, t);
    512     }
    513
    514     @Override
    515     public void info(final Object message) {
    516         logIfEnabled(FQCN, Level.INFO, null, message, null);
    517     }
    518
    519     @Override
    520     public void info(final Object message, final Throwable t) {
    521         logIfEnabled(FQCN, Level.INFO, null, message, t);
    522     }
    523
    524     @Override
    525     public void info(final String message) {
    526         logIfEnabled(FQCN, Level.INFO, null, message, (Throwable) null);
    527     }
    528
    529     @Override
    530     public void info(final String message, final Object... params) {
    531         logIfEnabled(FQCN, Level.INFO, null, message, params);
    532     }
    533
    534     @Override
    535     public void info(final String message, final Throwable t) {
    536         logIfEnabled(FQCN, Level.INFO, null, message, t);
    537     }
    538
    539     @Override
    540     public boolean isDebugEnabled() {
    541         return isEnabled(Level.DEBUG, null, null);
    542     }
    543
    544     @Override
    545     public boolean isDebugEnabled(final Marker marker) {
    546         return isEnabled(Level.DEBUG, marker, (Object) null, null);
    547     }
    548
    549     @Override
    550     public boolean isEnabled(final Level level) {
    551         return isEnabled(level, null, (Object) null, null);
    552     }
    553
    554     @Override
    555     public boolean isEnabled(final Level level, final Marker marker) {
    556         return isEnabled(level, marker, (Object) null, null);
    557     }
    558
    559     @Override
    560     public boolean isErrorEnabled() {
    561         return isEnabled(Level.ERROR, null, (Object) null, null);
    562     }
    563
    564     @Override
    565     public boolean isErrorEnabled(final Marker marker) {
    566         return isEnabled(Level.ERROR, marker, (Object) null, null);
    567     }
    568
    569     @Override
    570     public boolean isFatalEnabled() {
    571         return isEnabled(Level.FATAL, null, (Object) null, null);
    572     }
    573
    574     @Override
    575     public boolean isFatalEnabled(final Marker marker) {
    576         return isEnabled(Level.FATAL, marker, (Object) null, null);
    577     }
    578
    579     @Override
    580     public boolean isInfoEnabled() {
    581         return isEnabled(Level.INFO, null, (Object) null, null);
    582     }
    583
    584     @Override
    585     public boolean isInfoEnabled(final Marker marker) {
    586         return isEnabled(Level.INFO, marker, (Object) null, null);
    587     }
    588
    589     @Override
    590     public boolean isTraceEnabled() {
    591         return isEnabled(Level.TRACE, null, (Object) null, null);
    592     }
    593
    594     @Override
    595     public boolean isTraceEnabled(final Marker marker) {
    596         return isEnabled(Level.TRACE, marker, (Object) null, null);
    597     }
    598
    599     @Override
    600     public boolean isWarnEnabled() {
    601         return isEnabled(Level.WARN, null, (Object) null, null);
    602     }
    603
    604     @Override
    605     public boolean isWarnEnabled(final Marker marker) {
    606         return isEnabled(Level.WARN, marker, (Object) null, null);
    607     }
    608
    609     @Override
    610     public void log(final Level level, final Marker marker, final Message msg) {
    611         logIfEnabled(FQCN, level, marker, msg, (Throwable) null);
    612     }
    613
    614     @Override
    615     public void log(final Level level, final Marker marker, final Message msg, final Throwable t) {
    616         logIfEnabled(FQCN, level, marker, msg, t);
    617     }
    618
    619     @Override
    620     public void log(final Level level, final Marker marker, final Object message) {
    621         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
    622     }
    623
    624     @Override
    625     public void log(final Level level, final Marker marker, final Object message, final Throwable t) {
    626         if (isEnabled(level, marker, message, t)) {
    627             logMessage(FQCN, level, marker, message, t);
    628         }
    629     }
    630
    631     @Override
    632     public void log(final Level level, final Marker marker, final String message) {
    633         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
    634     }
    635
    636     @Override
    637     public void log(final Level level, final Marker marker, final String message, final Object... params) {
    638         logIfEnabled(FQCN, level, marker, message, params);
    639     }
    640
    641     @Override
    642     public void log(final Level level, final Marker marker, final String message, final Throwable t) {
    643         logIfEnabled(FQCN, level, marker, message, t);
    644     }
    645
    646     @Override
    647     public void log(final Level level, final Message msg) {
    648         logIfEnabled(FQCN, level, null, msg, null);
    649     }
    650
    651     @Override
    652     public void log(final Level level, final Message msg, final Throwable t) {
    653         logIfEnabled(FQCN, level, null, msg, t);
    654     }
    655
    656     @Override
    657     public void log(final Level level, final Object message) {
    658         logIfEnabled(FQCN, level, null, message, null);
    659     }
    660
    661     @Override
    662     public void log(final Level level, final Object message, final Throwable t) {
    663         logIfEnabled(FQCN, level, null, message, t);
    664     }
    665
    666     @Override
    667     public void log(final Level level, final String message) {
    668         logIfEnabled(FQCN, level, null, message, (Throwable) null);
    669     }
    670
    671     @Override
    672     public void log(final Level level, final String message, final Object... params) {
    673         logIfEnabled(FQCN, level, null, message, params);
    674     }
    675
    676     @Override
    677     public void log(final Level level, final String message, final Throwable t) {
    678         logIfEnabled(FQCN, level, null, message, t);
    679     }
    680
    681     @Override
    682     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
    683             final Throwable t) {
    684         if (isEnabled(level, marker, msg, t)) {
    685             logMessage(fqcn, level, marker, msg, t);
    686         }
    687     }
    688
    689     @Override
    690     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Object message,
    691             final Throwable t) {
    692         if (isEnabled(level, marker, message, t)) {
    693             logMessage(fqcn, level, marker, message, t);
    694         }
    695     }
    696
    697     @Override
    698     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message) {
    699         if (isEnabled(level, marker, message)) {
    700             logMessage(fqcn, level, marker, message);
    701         }
    702     }
    703
    704     @Override
    705     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
    706             final Object... params) {
    707         if (isEnabled(level, marker, message, params)) {
    708             logMessage(fqcn, level, marker, message, params);
    709         }
    710     }
    711
    712     @Override
    713     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,
    714             final Throwable t) {
    715         if (isEnabled(level, marker, message, t)) {
    716             logMessage(fqcn, level, marker, message, t);
    717         }
    718     }
    719
    720     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
    721             final Throwable t) {
    722         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
    723     }
    724
    725     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
    726             final Throwable t) {
    727         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
    728     }
    729
    730     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message) {
    731         final Message msg = messageFactory.newMessage(message);
    732         logMessage(fqcn, level, marker, msg, msg.getThrowable());
    733     }
    734
    735     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
    736             final Object... params) {
    737         final Message msg = messageFactory.newMessage(message, params);
    738         logMessage(fqcn, level, marker, msg, msg.getThrowable());
    739     }
    740
    741     @Override
    742     public void printf(final Level level, final Marker marker, final String format, final Object... params) {
    743         if (isEnabled(level, marker, format, params)) {
    744             final Message msg = new StringFormattedMessage(format, params);
    745             logMessage(FQCN, level, marker, msg, msg.getThrowable());
    746         }
    747     }
    748
    749     @Override
    750     public void printf(final Level level, final String format, final Object... params) {
    751         if (isEnabled(level, null, format, params)) {
    752             final Message msg = new StringFormattedMessage(format, params);
    753             logMessage(FQCN, level, null, msg, msg.getThrowable());
    754         }
    755     }
    756
    757     @Override
    758     public <T extends Throwable> T throwing(final T t) {
    759         return throwing(FQCN, Level.ERROR, t);
    760     }
    761
    762     @Override
    763     public <T extends Throwable> T throwing(final Level level, final T t) {
    764         return throwing(FQCN, level, t);
    765     }
    766
    767     /**
    768      * Logs a Throwable to be thrown.
    769      *
    770      * @param <T> the type of the Throwable.
    771      * @param fqcn the fully qualified class name of this Logger implementation.
    772      * @param level The logging Level.
    773      * @param t The Throwable.
    774      * @return the Throwable.
    775      */
    776     protected <T extends Throwable> T throwing(final String fqcn, final Level level, final T t) {
    777         if (isEnabled(level, THROWING_MARKER, (Object) null, null)) {
    778             logMessage(fqcn, level, THROWING_MARKER, throwingMsg(t), t);
    779         }
    780         return t;
    781     }
    782
    783     protected Message throwingMsg(final Throwable t) {
    784         return messageFactory.newMessage(THROWING);
    785     }
    786
    787     @Override
    788     public void trace(final Marker marker, final Message msg) {
    789         logIfEnabled(FQCN, Level.TRACE, marker, msg, null);
    790     }
    791
    792     @Override
    793     public void trace(final Marker marker, final Message msg, final Throwable t) {
    794         logIfEnabled(FQCN, Level.TRACE, marker, msg, t);
    795     }
    796
    797     @Override
    798     public void trace(final Marker marker, final Object message) {
    799         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
    800     }
    801
    802     @Override
    803     public void trace(final Marker marker, final Object message, final Throwable t) {
    804         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
    805     }
    806
    807     @Override
    808     public void trace(final Marker marker, final String message) {
    809         logIfEnabled(FQCN, Level.TRACE, marker, message, (Throwable) null);
    810     }
    811
    812     @Override
    813     public void trace(final Marker marker, final String message, final Object... params) {
    814         logIfEnabled(FQCN, Level.TRACE, marker, message, params);
    815     }
    816
    817     @Override
    818     public void trace(final Marker marker, final String message, final Throwable t) {
    819         logIfEnabled(FQCN, Level.TRACE, marker, message, t);
    820     }
    821
    822     @Override
    823     public void trace(final Message msg) {
    824         logIfEnabled(FQCN, Level.TRACE, null, msg, null);
    825     }
    826
    827     @Override
    828     public void trace(final Message msg, final Throwable t) {
    829         logIfEnabled(FQCN, Level.TRACE, null, msg, t);
    830     }
    831
    832     @Override
    833     public void trace(final Object message) {
    834         logIfEnabled(FQCN, Level.TRACE, null, message, null);
    835     }
    836
    837     @Override
    838     public void trace(final Object message, final Throwable t) {
    839         logIfEnabled(FQCN, Level.TRACE, null, message, t);
    840     }
    841
    842     @Override
    843     public void trace(final String message) {
    844         logIfEnabled(FQCN, Level.TRACE, null, message, (Throwable) null);
    845     }
    846
    847     @Override
    848     public void trace(final String message, final Object... params) {
    849         logIfEnabled(FQCN, Level.TRACE, null, message, params);
    850     }
    851
    852     @Override
    853     public void trace(final String message, final Throwable t) {
    854         logIfEnabled(FQCN, Level.TRACE, null, message, t);
    855     }
    856
    857     @Override
    858     public void warn(final Marker marker, final Message msg) {
    859         logIfEnabled(FQCN, Level.WARN, marker, msg, null);
    860     }
    861
    862     @Override
    863     public void warn(final Marker marker, final Message msg, final Throwable t) {
    864         logIfEnabled(FQCN, Level.WARN, marker, msg, t);
    865     }
    866
    867     @Override
    868     public void warn(final Marker marker, final Object message) {
    869         logIfEnabled(FQCN, Level.WARN, marker, message, null);
    870     }
    871
    872     /* -- FIXME: this comment looks lost
    873      * Instead of one single method with Object... declared the following methods explicitly specify parameters because
    874      * they perform dramatically better than having the JVM convert them to an array.
    875      */
    876
    877     @Override
    878     public void warn(final Marker marker, final Object message, final Throwable t) {
    879         logIfEnabled(FQCN, Level.WARN, marker, message, t);
    880     }
    881
    882     @Override
    883     public void warn(final Marker marker, final String message) {
    884         logIfEnabled(FQCN, Level.WARN, marker, message, (Throwable) null);
    885     }
    886
    887     @Override
    888     public void warn(final Marker marker, final String message, final Object... params) {
    889         logIfEnabled(FQCN, Level.WARN, marker, message, params);
    890     }
    891
    892     @Override
    893     public void warn(final Marker marker, final String message, final Throwable t) {
    894         logIfEnabled(FQCN, Level.WARN, marker, message, t);
    895     }
    896
    897     @Override
    898     public void warn(final Message msg) {
    899         logIfEnabled(FQCN, Level.WARN, null, msg, null);
    900     }
    901
    902     @Override
    903     public void warn(final Message msg, final Throwable t) {
    904         logIfEnabled(FQCN, Level.WARN, null, msg, t);
    905     }
    906
    907     @Override
    908     public void warn(final Object message) {
    909         logIfEnabled(FQCN, Level.WARN, null, message, null);
    910     }
    911
    912     @Override
    913     public void warn(final Object message, final Throwable t) {
    914         logIfEnabled(FQCN, Level.WARN, null, message, t);
    915     }
    916
    917     @Override
    918     public void warn(final String message) {
    919         logIfEnabled(FQCN, Level.WARN, null, message, (Throwable) null);
    920     }
    921
    922     @Override
    923     public void warn(final String message, final Object... params) {
    924         logIfEnabled(FQCN, Level.WARN, null, message, params);
    925     }
    926
    927     @Override
    928     public void warn(final String message, final Throwable t) {
    929         logIfEnabled(FQCN, Level.WARN, null, message, t);
    930     }
    931
    932 }