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    
018    package org.apache.commons.logging.impl;
019    
020    import java.io.Serializable;
021    import org.apache.log.Logger;
022    import org.apache.log.Hierarchy;
023    import org.apache.commons.logging.Log;
024    
025    /**
026     * Implementation of <code>org.apache.commons.logging.Log</code>
027     * that wraps the <a href="http://avalon.apache.org/logkit/">avalon-logkit</a>
028     * logging system. Configuration of <code>LogKit</code> is left to the user.
029     * <p>
030     * <code>LogKit</code> accepts only <code>String</code> messages.
031     * Therefore, this implementation converts object messages into strings
032     * by called their <code>toString()</code> method before logging them.
033     *
034     * @version $Id: LogKitLogger.html 862526 2013-05-20 17:07:42Z tn $
035     */
036    public class LogKitLogger implements Log, Serializable {
037    
038        /** Serializable version identifier. */
039        private static final long serialVersionUID = 3768538055836059519L;
040    
041        // ------------------------------------------------------------- Attributes
042    
043        /** Logging goes to this <code>LogKit</code> logger */
044        protected transient volatile Logger logger = null;
045    
046        /** Name of this logger */
047        protected String name = null;
048    
049        // ------------------------------------------------------------ Constructor
050    
051        /**
052         * Construct <code>LogKitLogger</code> which wraps the <code>LogKit</code>
053         * logger with given name.
054         *
055         * @param name log name
056         */
057        public LogKitLogger(String name) {
058            this.name = name;
059            this.logger = getLogger();
060        }
061    
062        // --------------------------------------------------------- Public Methods
063    
064        /**
065         * Return the underlying Logger we are using.
066         */
067        public Logger getLogger() {
068            Logger result = logger;
069            if (result == null) {
070                synchronized(this) {
071                    result = logger;
072                    if (result == null) {
073                        logger = result = Hierarchy.getDefaultHierarchy().getLoggerFor(name);
074                    }
075                }
076            }
077            return result;
078        }
079    
080        // ----------------------------------------------------- Log Implementation
081    
082        /**
083         * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
084         *
085         * @param message to log
086         * @see org.apache.commons.logging.Log#trace(Object)
087        */
088        public void trace(Object message) {
089            debug(message);
090        }
091    
092        /**
093         * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
094         *
095         * @param message to log
096         * @param t log this cause
097         * @see org.apache.commons.logging.Log#trace(Object, Throwable)
098         */
099        public void trace(Object message, Throwable t) {
100            debug(message, t);
101        }
102    
103        /**
104         * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
105         *
106         * @param message to log
107         * @see org.apache.commons.logging.Log#debug(Object)
108         */
109        public void debug(Object message) {
110            if (message != null) {
111                getLogger().debug(String.valueOf(message));
112            }
113        }
114    
115        /**
116         * Logs a message with <code>org.apache.log.Priority.DEBUG</code>.
117         *
118         * @param message to log
119         * @param t log this cause
120         * @see org.apache.commons.logging.Log#debug(Object, Throwable)
121         */
122        public void debug(Object message, Throwable t) {
123            if (message != null) {
124                getLogger().debug(String.valueOf(message), t);
125            }
126        }
127    
128        /**
129         * Logs a message with <code>org.apache.log.Priority.INFO</code>.
130         *
131         * @param message to log
132         * @see org.apache.commons.logging.Log#info(Object)
133         */
134        public void info(Object message) {
135            if (message != null) {
136                getLogger().info(String.valueOf(message));
137            }
138        }
139    
140        /**
141         * Logs a message with <code>org.apache.log.Priority.INFO</code>.
142         *
143         * @param message to log
144         * @param t log this cause
145         * @see org.apache.commons.logging.Log#info(Object, Throwable)
146         */
147        public void info(Object message, Throwable t) {
148            if (message != null) {
149                getLogger().info(String.valueOf(message), t);
150            }
151        }
152    
153        /**
154         * Logs a message with <code>org.apache.log.Priority.WARN</code>.
155         *
156         * @param message to log
157         * @see org.apache.commons.logging.Log#warn(Object)
158         */
159        public void warn(Object message) {
160            if (message != null) {
161                getLogger().warn(String.valueOf(message));
162            }
163        }
164    
165        /**
166         * Logs a message with <code>org.apache.log.Priority.WARN</code>.
167         *
168         * @param message to log
169         * @param t log this cause
170         * @see org.apache.commons.logging.Log#warn(Object, Throwable)
171         */
172        public void warn(Object message, Throwable t) {
173            if (message != null) {
174                getLogger().warn(String.valueOf(message), t);
175            }
176        }
177    
178        /**
179         * Logs a message with <code>org.apache.log.Priority.ERROR</code>.
180         *
181         * @param message to log
182         * @see org.apache.commons.logging.Log#error(Object)
183         */
184        public void error(Object message) {
185            if (message != null) {
186                getLogger().error(String.valueOf(message));
187            }
188        }
189    
190        /**
191         * Logs a message with <code>org.apache.log.Priority.ERROR</code>.
192         *
193         * @param message to log
194         * @param t log this cause
195         * @see org.apache.commons.logging.Log#error(Object, Throwable)
196         */
197        public void error(Object message, Throwable t) {
198            if (message != null) {
199                getLogger().error(String.valueOf(message), t);
200            }
201        }
202    
203        /**
204         * Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
205         *
206         * @param message to log
207         * @see org.apache.commons.logging.Log#fatal(Object)
208         */
209        public void fatal(Object message) {
210            if (message != null) {
211                getLogger().fatalError(String.valueOf(message));
212            }
213        }
214    
215        /**
216         * Logs a message with <code>org.apache.log.Priority.FATAL_ERROR</code>.
217         *
218         * @param message to log
219         * @param t log this cause
220         * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
221         */
222        public void fatal(Object message, Throwable t) {
223            if (message != null) {
224                getLogger().fatalError(String.valueOf(message), t);
225            }
226        }
227    
228        /**
229         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
230         */
231        public boolean isDebugEnabled() {
232            return getLogger().isDebugEnabled();
233        }
234    
235        /**
236         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>ERROR</code>.
237         */
238        public boolean isErrorEnabled() {
239            return getLogger().isErrorEnabled();
240        }
241    
242        /**
243         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>FATAL_ERROR</code>.
244         */
245        public boolean isFatalEnabled() {
246            return getLogger().isFatalErrorEnabled();
247        }
248    
249        /**
250         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>INFO</code>.
251         */
252        public boolean isInfoEnabled() {
253            return getLogger().isInfoEnabled();
254        }
255    
256        /**
257         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>DEBUG</code>.
258         */
259        public boolean isTraceEnabled() {
260            return getLogger().isDebugEnabled();
261        }
262    
263        /**
264         * Checks whether the <code>LogKit</code> logger will log messages of priority <code>WARN</code>.
265         */
266        public boolean isWarnEnabled() {
267            return getLogger().isWarnEnabled();
268        }
269    }