001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/framework/log/JCLLogger.java $
002 /*----------------------------------------------------------------------------
003 This file is part of deegree, http://deegree.org/
004 Copyright (C) 2001-2009 by:
005 Department of Geography, University of Bonn
006 and
007 lat/lon GmbH
008
009 This library is free software; you can redistribute it and/or modify it under
010 the terms of the GNU Lesser General Public License as published by the Free
011 Software Foundation; either version 2.1 of the License, or (at your option)
012 any later version.
013 This library is distributed in the hope that it will be useful, but WITHOUT
014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016 details.
017 You should have received a copy of the GNU Lesser General Public License
018 along with this library; if not, write to the Free Software Foundation, Inc.,
019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020
021 Contact information:
022
023 lat/lon GmbH
024 Aennchenstr. 19, 53177 Bonn
025 Germany
026 http://lat-lon.de/
027
028 Department of Geography, University of Bonn
029 Prof. Dr. Klaus Greve
030 Postfach 1147, 53001 Bonn
031 Germany
032 http://www.geographie.uni-bonn.de/deegree/
033
034 e-mail: info@deegree.org
035 ----------------------------------------------------------------------------*/
036 package org.deegree.framework.log;
037
038 import java.net.URL;
039
040 import org.apache.commons.logging.Log;
041 import org.apache.commons.logging.LogFactory;
042 import org.apache.log4j.BasicConfigurator;
043 import org.apache.log4j.PropertyConfigurator;
044
045 /**
046 * Log service provided for Apache Commons Logging (JCL) log service.
047 *
048 * @author <a href="mailto:tonnhofer@lat-lon.de">Oliver Tonnhofer</a>
049 *
050 * @author last edited by: UID=$Author: mschneider $
051 *
052 * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $
053 */
054 public class JCLLogger extends LoggerService {
055
056 private Log log;
057
058 private static String LOG4J_PROP_FILE = "log4j.properties";
059
060 private static String LOG4JLOGGER_CLASS = "org.apache.commons.logging.impl.Log4JLogger";
061
062 static {
063 Log log = null;
064 try {
065 log = LogFactory.getLog( JCLLogger.class );
066 } catch ( NoClassDefFoundError ncdfe ) {
067 StringBuilder sb = new StringBuilder( 1024 );
068 sb.append( " Could not instantiate the logger because(" );
069 sb.append( ncdfe.getMessage() );
070 sb.append( " to use the deegree logging framewormk, please put following libraries in your classpath:" );
071 sb.append( "\n - $deegree-base$/lib/commons/commons-logging.jar" );
072 sb.append( "\n - $deegree-base$/lib/log4j/log4j-1.2.9.jar" );
073 System.out.println( sb.toString() );
074 throw ncdfe;
075 }
076
077 // when log4j is used load log4j.properties from class path or package resource
078 // for backwards compatiblity with old Log4JLogger
079 if ( log.getClass().getName().equals( LOG4JLOGGER_CLASS ) ) {
080 URL urlToLog4jProps = JCLLogger.class.getResource( "/" + LOG4J_PROP_FILE );
081 if ( urlToLog4jProps == null ) {
082 urlToLog4jProps = JCLLogger.class.getResource( LOG4J_PROP_FILE );
083 }
084 if ( urlToLog4jProps != null ) {
085 PropertyConfigurator.configure( urlToLog4jProps );
086 log.debug( "Log4J: found log4j.properties, initialized the Logger with configuration found in file "
087 + urlToLog4jProps );
088 } else {
089 // Set up a simple configuration that logs on the console.
090 BasicConfigurator.configure();
091 log.warn( "Log4J: No log4j.properties found, initialized Log4J with a BasicConfiguration." );
092 }
093 } else {
094 try {
095 @SuppressWarnings("unused")
096 Class<?> log4jclass = Class.forName( LOG4JLOGGER_CLASS );
097 } catch ( ClassNotFoundException e ) {
098 log.warn( "Logging: Did not find complete version of Apache Commons Logging. Provide a propper commons-logging.jar in your lib/ directory for full logging functionality." );
099 }
100 }
101 }
102
103 public void bindClass( String name ) {
104 this.log = LogFactory.getLog( name );
105 }
106
107 public void bindClass( Class<?> name ) {
108 this.log = LogFactory.getLog( name );
109 }
110
111 public int getLevel() {
112 if ( log.isDebugEnabled() || log.isTraceEnabled() ) {
113 return ILogger.LOG_DEBUG;
114 } else if ( log.isInfoEnabled() ) {
115 return ILogger.LOG_INFO;
116 } else if ( log.isWarnEnabled() ) {
117 return ILogger.LOG_WARNING;
118 } else { // log.isErrorEnabled() || log.isFatalEnabled()
119 return ILogger.LOG_ERROR;
120 }
121 }
122
123 public void setLevel( int level ) {
124 log.error( "Can't change log level at runtime. " + "Use the appropriate properties file for configuration." );
125 }
126
127 public boolean isDebug() {
128 return log.isDebugEnabled();
129 }
130
131 @Override
132 public void logDebug( String message ) {
133 log.debug( message );
134 }
135
136 @Override
137 public void logDebug( String message, Throwable e ) {
138 log.debug( message, e );
139 }
140
141 public void logDebug( String message, Object tracableObject ) {
142 if ( log.isDebugEnabled() ) {
143 log.debug( message + tracableObject );
144 }
145 }
146
147 public void logDebug( String message, Object... tracableObjects ) {
148 if ( log.isDebugEnabled() ) {
149 log.debug( stringFromObjects( message, tracableObjects ) );
150 }
151 }
152
153 public void logError( String message ) {
154 log.error( message );
155 }
156
157 public void logError( String message, Throwable e ) {
158 log.error( message, e );
159 }
160
161 @Override
162 public void logInfo( String message ) {
163 log.info( message );
164 }
165
166 @Override
167 public void logInfo( String message, Throwable e ) {
168 log.info( message, e );
169 }
170
171 public void logInfo( String message, Object tracableObject ) {
172 log.info( message + ": " + tracableObject );
173 }
174
175 public void logInfo( String message, Object... tracableObject ) {
176 if ( log.isInfoEnabled() ) {
177 log.info( stringFromObjects( message, tracableObject ) );
178 }
179 }
180
181 @Override
182 public void logWarning( String message ) {
183 log.warn( message );
184 }
185
186 @Override
187 public void logWarning( String message, Throwable e ) {
188 log.warn( message, e );
189 }
190
191 // not used?
192 public void log( int priority, String message, Throwable ex ) {
193 logDebug( message, ex );
194 }
195
196 // not used?
197 public void log( int priority, String message, Object source, Throwable ex ) {
198 logDebug( message, ex );
199 }
200
201 private String stringFromObjects( String message, Object... objects ) {
202 StringBuilder sb = new StringBuilder( message );
203 for ( Object part : objects ) {
204 sb.append( ' ' ).append( part.toString() );
205 }
206 return sb.toString();
207 }
208
209 public void logError( Throwable e ) {
210 if ( e != null ) {
211 logError( e.getLocalizedMessage(), e );
212 } else {
213 logError( "No exception to log.", new NullPointerException( "No exception to log." ) );
214 }
215 }
216 }