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
    18  package org.apache.commons.logging.impl;
    19
    20  import org.apache.avalon.framework.logger.Logger;
    21  import org.apache.commons.logging.Log;
    22
    23  /**
    24   * <p>Implementation of commons-logging Log interface that delegates all
    25   * logging calls to the Avalon logging abstraction: the Logger interface.
    26   * </p>
    27   * <p>
    28   * There are two ways in which this class can be used:
    29   * </p>
    30   * <ul>
    31   * <li>the instance can be constructed with an Avalon logger
    32   * (by calling {@link #AvalonLogger(Logger)}). In this case, it acts
    33   * as a simple thin wrapping implementation over the logger. This is
    34   * particularly useful when using a property setter.
    35   * </li>
    36   * <li>the {@link #setDefaultLogger} class property can be called which
    37   * sets the ancesteral Avalon logger for this class. Any <code>AvalonLogger</code>
    38   * instances created through the <code>LogFactory</code> mechanisms will output
    39   * to child loggers of this <code>Logger</code>.
    40   * </li>
    41   * </ul>
    42   * <p>
    43   * <strong>Note:</strong> <code>AvalonLogger</code> does not implement Serializable
    44   * because the constructors available for it make this impossible to achieve in all
    45   * circumstances; there is no way to "reconnect" to an underlying Logger object on
    46   * deserialization if one was just passed in to the constructor of the original
    47   * object. This class <i>was</i> marked Serializable in the 1.0.4 release of
    48   * commons-logging, but this never actually worked (a NullPointerException would
    49   * be thrown as soon as the deserialized object was used), so removing this marker
    50   * is not considered to be an incompatible change.
    51   * </p>
    52   * @author <a href="mailto:neeme@apache.org">Neeme Praks</a>
    53   * @version $Revision: 424107 $ $Date: 2006-07-21 01:15:42 +0200 (fr, 21 jul 2006) $
    54   */
    55  public class AvalonLogger implements Log {
    56
    57      /** Ancesteral avalon logger  */
    58      private static Logger defaultLogger = null;
    59      /** Avalon logger used to perform log */
    60      private transient Logger logger = null;
    61
    62      /**
    63       * Constructs an <code>AvalonLogger</code> that outputs to the given
    64       * <code>Logger</code> instance.
    65       * @param logger the avalon logger implementation to delegate to
    66       */
    67      public AvalonLogger(Logger logger) {
    68          this.logger = logger;
    69      }
    70
    71      /**
    72       * Constructs an <code>AvalonLogger</code> that will log to a child
    73       * of the <code>Logger</code> set by calling {@link #setDefaultLogger}.
    74       * @param name the name of the avalon logger implementation to delegate to
    75       */
    76      public AvalonLogger(String name) {
    77          if (defaultLogger == null)
    78              throw new NullPointerException("default logger has to be specified if this constructor is used!");
    79          this.logger = defaultLogger.getChildLogger(name);
    80      }
    81
    82      /**
    83       * Gets the Avalon logger implementation used to perform logging.
    84       * @return avalon logger implementation
    85       */
    86      public Logger getLogger() {
    87          return logger;
    88      }
    89
    90      /**
    91       * Sets the ancesteral Avalon logger from which the delegating loggers
    92       * will descend.
    93       * @param logger the default avalon logger,
    94       * in case there is no logger instance supplied in constructor
    95       */
    96      public static void setDefaultLogger(Logger logger) {
    97          defaultLogger = logger;
    98      }
    99
    100     /**
    101     * Logs a message with
    102     * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
    103     *
    104     * @param message to log
    105     * @param t log this cause
    106     * @see org.apache.commons.logging.Log#debug(Object, Throwable)
    107      */
    108     public void debug(Object message, Throwable t) {
    109         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
    110     }
    111
    112     /**
    113      * Logs a message with
    114      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
    115      *
    116      * @param message to log.
    117      * @see org.apache.commons.logging.Log#debug(Object)
    118      */
    119     public void debug(Object message) {
    120         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
    121     }
    122
    123     /**
    124      * Logs a message with
    125      * <code>org.apache.avalon.framework.logger.Logger.error</code>.
    126      *
    127      * @param message to log
    128      * @param t log this cause
    129      * @see org.apache.commons.logging.Log#error(Object, Throwable)
    130      */
    131     public void error(Object message, Throwable t) {
    132         if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message), t);
    133     }
    134
    135     /**
    136      * Logs a message with
    137      * <code>org.apache.avalon.framework.logger.Logger.error</code>.
    138      *
    139      * @param message to log
    140      * @see org.apache.commons.logging.Log#error(Object)
    141      */
    142     public void error(Object message) {
    143         if (getLogger().isErrorEnabled()) getLogger().error(String.valueOf(message));
    144     }
    145
    146     /**
    147      * Logs a message with
    148      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
    149      *
    150      * @param message to log.
    151      * @param t log this cause.
    152      * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
    153      */
    154     public void fatal(Object message, Throwable t) {
    155         if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message), t);
    156     }
    157
    158     /**
    159      * Logs a message with
    160      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code>.
    161      *
    162      * @param message to log
    163      * @see org.apache.commons.logging.Log#fatal(Object)
    164      */
    165     public void fatal(Object message) {
    166         if (getLogger().isFatalErrorEnabled()) getLogger().fatalError(String.valueOf(message));
    167     }
    168
    169     /**
    170      * Logs a message with
    171      * <code>org.apache.avalon.framework.logger.Logger.info</code>.
    172      *
    173      * @param message to log
    174      * @param t log this cause
    175      * @see org.apache.commons.logging.Log#info(Object, Throwable)
    176      */
    177     public void info(Object message, Throwable t) {
    178         if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message), t);
    179     }
    180
    181     /**
    182      * Logs a message with
    183      * <code>org.apache.avalon.framework.logger.Logger.info</code>.
    184      *
    185      * @param message to log
    186      * @see org.apache.commons.logging.Log#info(Object)
    187      */
    188     public void info(Object message) {
    189         if (getLogger().isInfoEnabled()) getLogger().info(String.valueOf(message));
    190     }
    191
    192     /**
    193      * Is logging to
    194      * <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
    195      * @see org.apache.commons.logging.Log#isDebugEnabled()
    196      */
    197     public boolean isDebugEnabled() {
    198         return getLogger().isDebugEnabled();
    199     }
    200
    201     /**
    202      * Is logging to
    203      * <code>org.apache.avalon.framework.logger.Logger.error</code> enabled?
    204      * @see org.apache.commons.logging.Log#isErrorEnabled()
    205      */
    206     public boolean isErrorEnabled() {
    207         return getLogger().isErrorEnabled();
    208     }
    209
    210     /**
    211      * Is logging to
    212      * <code>org.apache.avalon.framework.logger.Logger.fatalError</code> enabled?
    213      * @see org.apache.commons.logging.Log#isFatalEnabled()
    214      */
    215     public boolean isFatalEnabled() {
    216         return getLogger().isFatalErrorEnabled();
    217     }
    218
    219     /**
    220      * Is logging to
    221      * <code>org.apache.avalon.framework.logger.Logger.info</code> enabled?
    222      * @see org.apache.commons.logging.Log#isInfoEnabled()
    223      */
    224     public boolean isInfoEnabled() {
    225         return getLogger().isInfoEnabled();
    226     }
    227
    228     /**
    229      * Is logging to
    230      * <code>org.apache.avalon.framework.logger.Logger.debug</code> enabled?
    231      * @see org.apache.commons.logging.Log#isTraceEnabled()
    232      */
    233     public boolean isTraceEnabled() {
    234         return getLogger().isDebugEnabled();
    235     }
    236
    237     /**
    238      * Is logging to
    239      * <code>org.apache.avalon.framework.logger.Logger.warn</code> enabled?
    240      * @see org.apache.commons.logging.Log#isWarnEnabled()
    241      */
    242     public boolean isWarnEnabled() {
    243         return getLogger().isWarnEnabled();
    244     }
    245
    246     /**
    247      * Logs a message with
    248      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
    249      *
    250      * @param message to log.
    251      * @param t log this cause.
    252      * @see org.apache.commons.logging.Log#trace(Object, Throwable)
    253      */
    254     public void trace(Object message, Throwable t) {
    255         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message), t);
    256     }
    257
    258     /**
    259      * Logs a message with
    260      * <code>org.apache.avalon.framework.logger.Logger.debug</code>.
    261      *
    262      * @param message to log
    263      * @see org.apache.commons.logging.Log#trace(Object)
    264      */
    265     public void trace(Object message) {
    266         if (getLogger().isDebugEnabled()) getLogger().debug(String.valueOf(message));
    267     }
    268
    269     /**
    270      * Logs a message with
    271      * <code>org.apache.avalon.framework.logger.Logger.warn</code>.
    272      *
    273      * @param message to log
    274      * @param t log this cause
    275      * @see org.apache.commons.logging.Log#warn(Object, Throwable)
    276      */
    277     public void warn(Object message, Throwable t) {
    278         if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message), t);
    279     }
    280
    281     /**
    282      * Logs a message with
    283      * <code>org.apache.avalon.framework.logger.Logger.warn</code>.
    284      *
    285      * @param message to log
    286      * @see org.apache.commons.logging.Log#warn(Object)
    287      */
    288     public void warn(Object message) {
    289         if (getLogger().isWarnEnabled()) getLogger().warn(String.valueOf(message));
    290     }
    291
    292 }