morciuch 2003/07/23 13:24:25 Added: src/java/org/apache/jetspeed/services/logging JetspeedLogger.java JetspeedLogFactoryService.java Log: Refactored logging service - a tremendous effort by Harald Ommang (see Bugzilla bug# 19906). Few minor issues remain but will be resolved shortly. Revision Changes Path 1.1 jakarta-jetspeed/src/java/org/apache/jetspeed/services/logging/JetspeedLogger.java Index: JetspeedLogger.java =================================================================== package org.apache.jetspeed.services.logging; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Turbine" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Turbine", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ // Log4J classes import org.apache.log4j.Category; import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; /** * The implementation of loggers for Jetspeed. * * This class acts as a wrapper so that the underlying logging implementation * is hidden fromthe rest of Jetspeed * The current implementation uses Log4J. * * @author <a href="mailto:[EMAIL PROTECTED]">Harald Ommang</a> */ public class JetspeedLogger { /** * The Log4J logger that is wrapped */ private Logger logger; /** * Constructor. Initialises this class with a given logger. * If the logger is null, one is given named from this class. * * @param logger The logger to wrap */ public JetspeedLogger(Logger logger) { if(logger != null) { this.logger = logger; } else { this.logger = LogManager.getLogger(JetspeedLogger.class.getName()); } } /** * Checks if the current logger is enabled for debug logging. * * @return true if debug is enabled */ public boolean isDebugEnabled() { return logger.isDebugEnabled(); } /** * Checks if the current logger is enabled for error logging. * * @return true if error is enabled */ public boolean isErrorEnabled() { return logger.isEnabledFor(Level.ERROR); } /** * Checks if the current logger is enabled for fatal logging. * * @return true if fatal is enabled */ public boolean isFatalEnabled() { return logger.isEnabledFor(Level.FATAL); } /** * Checks if the current logger is enabled for info logging. * * @return true if info is enabled */ public boolean isInfoEnabled() { return logger.isInfoEnabled(); } /** * Checks if the current logger is enabled for trace logging. * Wtih log4J, this is the same as debug. * * @return true if trace is enabled */ public boolean isTraceEnabled() { return logger.isDebugEnabled(); } /** * Checks if the current logger is enabled for warning logging. * * @return true if warning is enabled */ public boolean isWarnEnabled() { return logger.isEnabledFor(Level.WARN); } /** * Logs the given object if debug is enabled * * @param obj Object to log */ public void debug(Object obj) { logger.debug(obj); } /** * Logs the given object and throwable if debug is enabled * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void debug(Object obj, Throwable throwable) { logger.debug(obj, throwable); } /** * Logs the given object if error is enabled * * @param obj Object to log */ public void error(Object obj) { logger.error(obj); } /** * Logs the given object and throwable if error is enabled * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void error(Object obj, Throwable throwable) { logger.error(obj, throwable); } /** * Logs the given object if fatal is enabled * * @param obj Object to log */ public void fatal(Object obj) { logger.fatal(obj); } /** * Logs the given object and throwable if fatal is enabled * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void fatal(Object obj, Throwable throwable) { logger.fatal(obj, throwable); } /** * Logs the given object if info is enabled * * @param obj Object to log */ public void info(Object obj) { logger.info(obj); } /** * Logs the given object and throwable if info is enabled * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void info(Object obj, Throwable throwable) { logger.info(obj, throwable); } /** * Logs the given object if trace is enabled * With Log4J, this is the same as debug * * @param obj Object to log */ public void trace(Object obj) { logger.debug(obj); } /** * Logs the given object and throwable if trace is enabled * With Log4J, this is the same as debug * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void trace(Object obj, Throwable throwable) { logger.debug(obj, throwable); } /** * Logs the given object if warning is enabled * * @param obj Object to log */ public void warn(Object obj) { logger.warn(obj); } /** * Logs the given object and throwable if warning is enabled * * @param obj Object to log * @param throwable The underlying implementation may log stack trace for this */ public void warn(Object obj, Throwable throwable) { logger.warn(obj, throwable); } } // class JetspeedLogger 1.1 jakarta-jetspeed/src/java/org/apache/jetspeed/services/logging/JetspeedLogFactoryService.java Index: JetspeedLogFactoryService.java =================================================================== package org.apache.jetspeed.services.logging; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Turbine" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Turbine", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ // Java classes import javax.servlet.ServletConfig; import javax.servlet.ServletContext; // Jetspeed classes import org.apache.jetspeed.services.resources.JetspeedResources; // Log4J classes import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.xml.DOMConfigurator; // Turbine classes import org.apache.turbine.Turbine; import org.apache.turbine.services.BaseInitable; import org.apache.turbine.services.InitializationException; import org.apache.turbine.services.TurbineBaseService; /** * The default implementation of the logging service in Jetspeed. * * This service initializes the underlying logging implementation, * and acts as a factory for loggers. * The current implementation uses Log4J. * * @see org.apache.log4j.LogManager * @see org.apache.log4j.Logger * @author <a href="mailto:[EMAIL PROTECTED]">Harald Ommang</a> */ public class JetspeedLogFactoryService extends TurbineBaseService { public String SERVICE_NAME = "JetspeedLogFactoryService"; private static final String CONFIG_LOG4J_PROPERTIES = "log4j.properties"; private static final String CONFIG_LOG4J_PROPERTIES_DEFAULT = "/WEB-INF/conf/log4j.properties"; private static final String CONFIG_LOG4J_AND_WATCH = "log4j.configureAndWatch"; private static final boolean CONFIG_LOG4J_AND_WATCH_DEFAULT = true; private static final String CONFIG_LOG4J_WATCHINTERVAL = "log4j.watchInterval"; private static final long CONFIG_LOG4J_WATCHINTERVAL_DEFAULT = 60000L; private ServletContext context; /** * Default constructor */ public JetspeedLogFactoryService() { context = null; } /** * Initializes the service by getting the servlet configuration from Turbine * * @throws InitializationException Initialization failed */ public void init() throws InitializationException { ServletConfig conf = Turbine.getTurbineServletConfig(); init(conf); } /** * Initializes the service with the given configuration * Initializes the underlying logging implementation, Log4J * * @param config The ServletConfiguration from Turbine * * @throws InitializationException Initialization failed */ public void init(ServletConfig config) throws InitializationException { context = config.getServletContext(); String log4jProperties = JetspeedResources.getString(CONFIG_LOG4J_PROPERTIES, CONFIG_LOG4J_PROPERTIES_DEFAULT); if(log4jProperties != null) { try { String fileName = Turbine.getRealPath(log4jProperties); boolean watch = JetspeedResources.getBoolean(CONFIG_LOG4J_AND_WATCH, CONFIG_LOG4J_AND_WATCH_DEFAULT); long watchInterval = JetspeedResources.getLong(CONFIG_LOG4J_WATCHINTERVAL, CONFIG_LOG4J_WATCHINTERVAL_DEFAULT); System.setProperty("webappRoot", context.getRealPath("/")); // Check to see if property or XML configuration is to be used. if(fileName.endsWith(".properties")) { if(watch) { // Configure with a property file and watch for changes PropertyConfigurator.configureAndWatch(fileName, watchInterval); } else { PropertyConfigurator.configure(fileName); } } else { if(watch) { // Configure with an XML file and watch for changes DOMConfigurator.configureAndWatch(fileName, watchInterval); } else { DOMConfigurator.configure(fileName); } } } catch(Exception e) { throw new InitializationException("Failed to load " + log4jProperties + " - " + e.toString()); } } setInit(true); } // init /** * The actual Factory method that gets the appropriate logger from Log4j and * wraps it in a JetspeedLogger */ public static JetspeedLogger getLogger(String loggerName) { Logger newLog = LogManager.getLogger(loggerName); JetspeedLogger newLogger = new JetspeedLogger(newLog); return newLogger; } } // class JetspeedLogFactoryService
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]