    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 */
    017
    018package org.apache.commons.logging.impl;
    019
    020import java.util.Objects;
    021
    022import org.apache.avalon.framework.logger.Logger;
    023import org.apache.commons.logging.Log;
    024
    025/**
    026 * Implements Commons Logging's Log interface to delegate all
    027 * logging calls to the Avalon logging abstraction: the Logger interface.
    028 * <p>
    029 * There are two ways in which this class can be used:
    030 * <ul>
    031 * <li>the instance can be constructed with an Avalon logger
    032 * (by calling {@link #AvalonLogger(Logger)}). In this case, it acts
    033 * as a simple thin wrapping implementation over the logger. This is
    034 * particularly useful when using a property setter.
    035 * </li>
    036 * <li>the {@link #setDefaultLogger} class property can be called which
    037 * sets the ancestral Avalon logger for this class. Any {@code AvalonLogger}
    038 * instances created through the {@code LogFactory} mechanisms will output
    039 * to child loggers of this {@code Logger}.
    040 * </li>
    041 * </ul>
    042 * <p>
    043 * <strong>Note:</strong> {@code AvalonLogger} does not implement Serializable
    044 * because the constructors available for it make this impossible to achieve in all
    045 * circumstances; there is no way to "reconnect" to an underlying Logger object on
    046 * deserialization if one was just passed in to the constructor of the original
    047 * object. This class <em>was</em> marked Serializable in the 1.0.4 release of
    048 * commons-logging, but this never actually worked (a NullPointerException would
    049 * be thrown as soon as the deserialized object was used), so removing this marker
    050 * is not considered to be an incompatible change.
    051 *
    052 * @deprecated Scheduled for removal because the Apache Avalon Project has been discontinued.
    053 */
    054@Deprecated
    055public class AvalonLogger implements Log {
    056
    057    /** Ancestral Avalon logger. */
    058    private static volatile Logger defaultLogger;
    059
    060    /**
    061     * Sets the ancestral Avalon logger from which the delegating loggers will descend.
    062     *
    063     * @param logger the default avalon logger,
    064     * in case there is no logger instance supplied in constructor
    065     */
    066    public static void setDefaultLogger(final Logger logger) {
    067        defaultLogger = logger;
    068    }
    069
    070    /** Avalon logger used to perform log. */
    071    private final transient Logger logger;
    072
    073    /**
    074     * Constructs an {@code AvalonLogger} that outputs to the given
    075     * {@code Logger} instance.
    076     *
    077     * @param logger the Avalon logger implementation to delegate to
    078     */
    079    public AvalonLogger(final Logger logger) {
    080        this.logger = logger;
    081    }
    082
    083    /**
    084     * Constructs an {@code AvalonLogger} that will log to a child
    085     * of the {@code Logger} set by calling {@link #setDefaultLogger}.
    086     *
    087     * @param name the name of the avalon logger implementation to delegate to
    088     */
    089    public AvalonLogger(final String name) {
    090        Objects.requireNonNull(defaultLogger, "defaultLogger");
    091        this.logger = defaultLogger.getChildLogger(name);
    092    }
    093
    094    /**
    095     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.debug}.
    096     *
    097     * @param message to log.
    098     * @see org.apache.commons.logging.Log#debug(Object)
    099     */
    100    @Override
    101    public void debug(final Object message) {
    102        if (getLogger().isDebugEnabled()) {
    103            getLogger().debug(String.valueOf(message));
    104        }
    105    }
    106
    107    /**
    108    * Logs a message with {@code org.apache.avalon.framework.logger.Logger.debug}.
    109    *
    110    * @param message to log
    111    * @param t log this cause
    112    * @see org.apache.commons.logging.Log#debug(Object, Throwable)
    113     */
    114    @Override
    115    public void debug(final Object message, final Throwable t) {
    116        if (getLogger().isDebugEnabled()) {
    117            getLogger().debug(String.valueOf(message), t);
    118        }
    119    }
    120
    121    /**
    122     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.error}.
    123     *
    124     * @param message to log
    125     * @see org.apache.commons.logging.Log#error(Object)
    126     */
    127    @Override
    128    public void error(final Object message) {
    129        if (getLogger().isErrorEnabled()) {
    130            getLogger().error(String.valueOf(message));
    131        }
    132    }
    133
    134    /**
    135     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.error}.
    136     *
    137     * @param message to log
    138     * @param t log this cause
    139     * @see org.apache.commons.logging.Log#error(Object, Throwable)
    140     */
    141    @Override
    142    public void error(final Object message, final Throwable t) {
    143        if (getLogger().isErrorEnabled()) {
    144            getLogger().error(String.valueOf(message), t);
    145        }
    146    }
    147
    148    /**
    149     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.fatalError}.
    150     *
    151     * @param message to log
    152     * @see org.apache.commons.logging.Log#fatal(Object)
    153     */
    154    @Override
    155    public void fatal(final Object message) {
    156        if (getLogger().isFatalErrorEnabled()) {
    157            getLogger().fatalError(String.valueOf(message));
    158        }
    159    }
    160
    161    /**
    162     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.fatalError}.
    163     *
    164     * @param message to log.
    165     * @param t log this cause.
    166     * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
    167     */
    168    @Override
    169    public void fatal(final Object message, final Throwable t) {
    170        if (getLogger().isFatalErrorEnabled()) {
    171            getLogger().fatalError(String.valueOf(message), t);
    172        }
    173    }
    174
    175    /**
    176     * Gets the Avalon logger implementation used to perform logging.
    177     *
    178     * @return avalon logger implementation
    179     */
    180    public Logger getLogger() {
    181        return logger;
    182    }
    183
    184    /**
    185     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.info}.
    186     *
    187     * @param message to log
    188     * @see org.apache.commons.logging.Log#info(Object)
    189     */
    190    @Override
    191    public void info(final Object message) {
    192        if (getLogger().isInfoEnabled()) {
    193            getLogger().info(String.valueOf(message));
    194        }
    195    }
    196
    197    /**
    198     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.info}.
    199     *
    200     * @param message to log
    201     * @param t log this cause
    202     * @see org.apache.commons.logging.Log#info(Object, Throwable)
    203     */
    204    @Override
    205    public void info(final Object message, final Throwable t) {
    206        if (getLogger().isInfoEnabled()) {
    207            getLogger().info(String.valueOf(message), t);
    208        }
    209    }
    210
    211    /**
    212     * Is logging to {@code org.apache.avalon.framework.logger.Logger.debug} enabled?
    213     * @see org.apache.commons.logging.Log#isDebugEnabled()
    214     */
    215    @Override
    216    public boolean isDebugEnabled() {
    217        return getLogger().isDebugEnabled();
    218    }
    219
    220    /**
    221     * Is logging to {@code org.apache.avalon.framework.logger.Logger.error} enabled?
    222     * @see org.apache.commons.logging.Log#isErrorEnabled()
    223     */
    224    @Override
    225    public boolean isErrorEnabled() {
    226        return getLogger().isErrorEnabled();
    227    }
    228
    229    /**
    230     * Is logging to {@code org.apache.avalon.framework.logger.Logger.fatalError} enabled?
    231     * @see org.apache.commons.logging.Log#isFatalEnabled()
    232     */
    233    @Override
    234    public boolean isFatalEnabled() {
    235        return getLogger().isFatalErrorEnabled();
    236    }
    237
    238    /**
    239     * Is logging to {@code org.apache.avalon.framework.logger.Logger.info} enabled?
    240     * @see org.apache.commons.logging.Log#isInfoEnabled()
    241     */
    242    @Override
    243    public boolean isInfoEnabled() {
    244        return getLogger().isInfoEnabled();
    245    }
    246
    247    /**
    248     * Is logging to {@code org.apache.avalon.framework.logger.Logger.debug} enabled?
    249     * @see org.apache.commons.logging.Log#isTraceEnabled()
    250     */
    251    @Override
    252    public boolean isTraceEnabled() {
    253        return getLogger().isDebugEnabled();
    254    }
    255
    256    /**
    257     * Is logging to {@code org.apache.avalon.framework.logger.Logger.warn} enabled?
    258     * @see org.apache.commons.logging.Log#isWarnEnabled()
    259     */
    260    @Override
    261    public boolean isWarnEnabled() {
    262        return getLogger().isWarnEnabled();
    263    }
    264
    265    /**
    266     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.debug}.
    267     *
    268     * @param message to log
    269     * @see org.apache.commons.logging.Log#trace(Object)
    270     */
    271    @Override
    272    public void trace(final Object message) {
    273        if (getLogger().isDebugEnabled()) {
    274            getLogger().debug(String.valueOf(message));
    275        }
    276    }
    277
    278    /**
    279     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.debug}.
    280     *
    281     * @param message to log.
    282     * @param t log this cause.
    283     * @see org.apache.commons.logging.Log#trace(Object, Throwable)
    284     */
    285    @Override
    286    public void trace(final Object message, final Throwable t) {
    287        if (getLogger().isDebugEnabled()) {
    288            getLogger().debug(String.valueOf(message), t);
    289        }
    290    }
    291
    292    /**
    293     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.warn}.
    294     *
    295     * @param message to log
    296     * @see org.apache.commons.logging.Log#warn(Object)
    297     */
    298    @Override
    299    public void warn(final Object message) {
    300        if (getLogger().isWarnEnabled()) {
    301            getLogger().warn(String.valueOf(message));
    302        }
    303    }
    304
    305    /**
    306     * Logs a message with {@code org.apache.avalon.framework.logger.Logger.warn}.
    307     *
    308     * @param message to log
    309     * @param t log this cause
    310     * @see org.apache.commons.logging.Log#warn(Object, Throwable)
    311     */
    312    @Override
    313    public void warn(final Object message, final Throwable t) {
    314        if (getLogger().isWarnEnabled()) {
    315            getLogger().warn(String.valueOf(message), t);
    316        }
    317    }
    318}