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 java.util.Objects;
21  
22  import org.apache.avalon.framework.logger.Logger;
23  import org.apache.commons.logging.Log;
24  
25  /**
26   * Implementation of commons-logging Log interface that delegates all
27   * logging calls to the Avalon logging abstraction: the Logger interface.
28   * <p>
29   * There are two ways in which this class can be used:
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 ancestral Avalon logger for this class. Any {@code AvalonLogger}
38   * instances created through the {@code LogFactory} mechanisms will output
39   * to child loggers of this {@code Logger}.
40   * </li>
41   * </ul>
42   * <p>
43   * <strong>Note:</strong> {@code AvalonLogger} 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   *
52   * @deprecated Scheduled for removal because the Apache Avalon Project has been discontinued.
53   */
54  @Deprecated
55  public class AvalonLogger implements Log {
56  
57      /** Ancestral Avalon logger. */
58      private static volatile Logger defaultLogger;
59  
60      /**
61       * Sets the ancestral Avalon logger from which the delegating loggers will descend.
62       *
63       * @param logger the default avalon logger,
64       * in case there is no logger instance supplied in constructor
65       */
66      public static void setDefaultLogger(final Logger logger) {
67          defaultLogger = logger;
68      }
69  
70      /** Avalon logger used to perform log. */
71      private final transient Logger logger;
72  
73      /**
74       * Constructs an {@code AvalonLogger} that outputs to the given
75       * {@code Logger} instance.
76       *
77       * @param logger the Avalon logger implementation to delegate to
78       */
79      public AvalonLogger(final Logger logger) {
80          this.logger = logger;
81      }
82  
83      /**
84       * Constructs an {@code AvalonLogger} that will log to a child
85       * of the <code>Logger</code> set by calling {@link #setDefaultLogger}.
86       *
87       * @param name the name of the avalon logger implementation to delegate to
88       */
89      public AvalonLogger(final String name) {
90          Objects.requireNonNull(defaultLogger, "default logger has to be specified if this constructor is used!");
91          this.logger = defaultLogger.getChildLogger(name);
92      }
93  
94      /**
95       * Logs a message with {@code org.apache.avalon.framework.logger.Logger.debug}.
96       *
97       * @param message to log.
98       * @see org.apache.commons.logging.Log#debug(Object)
99       */
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 }