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 }