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