cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/04/27 14:54:01 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java Log: - Rather large change to support better the core configuration file loading. Revision ChangesPath 1.10 +193 -118 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ClassLoaderLogManager.java22 Mar 2005 10:29:47 - 1.9 +++ ClassLoaderLogManager.java27 Apr 2005 21:54:01 - 1.10 @@ -16,6 +16,8 @@ package org.apache.juli; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLClassLoader; @@ -73,14 +75,10 @@ ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); -if (classLoader == null || (global.equals(loggerName))) { -return super.addLogger(logger); -} ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); if (info.loggers.containsKey(loggerName)) { return false; } - info.loggers.put(loggerName, logger); // Apply initial level for new logger @@ -171,13 +169,9 @@ * @param name The name of the logger to retrieve */ public synchronized Logger getLogger(final String name) { -final ClassLoader classLoader = Thread.currentThread() +ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); -if (classLoader == null || (global.equals(name))) { -return super.getLogger(name); -} -final Map loggers = getClassLoaderInfo(classLoader).loggers; -return (Logger) loggers.get(name); +return (Logger) getClassLoaderInfo(classLoader).loggers.get(name); } @@ -186,13 +180,9 @@ * classloader local configuration. */ public synchronized Enumeration getLoggerNames() { -final ClassLoader classLoader = Thread.currentThread() +ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); -if (classLoader == null) { -return super.getLoggerNames(); -} -final Map loggers = getClassLoaderInfo(classLoader).loggers; -return Collections.enumeration(loggers.keySet()); +return Collections.enumeration(getClassLoaderInfo(classLoader).loggers.keySet()); } @@ -203,11 +193,8 @@ * @param name The property name */ public String getProperty(String name) { -final ClassLoader classLoader = Thread.currentThread() +ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); -if (classLoader == null) { -return super.getProperty(name); -} String prefix = (String) this.prefix.get(); if (prefix != null) { name = prefix + name; @@ -235,22 +222,31 @@ } // Simple property replacement (mostly for folder names) if (result != null) { -result = result.trim(); -if (result.startsWith(${)) { -int pos = result.indexOf('}'); -if (pos != -1) { -String propName = result.substring(2, pos); -String replacement = System.getProperty(propName); -if (replacement != null) { -result = replacement + result.substring(pos + 1); -} -} -} +result = replace(result); } return result; } +public void readConfiguration() +throws IOException, SecurityException { + +checkAccess(); + +readConfiguration(Thread.currentThread().getContextClassLoader()); + +} + +public void readConfiguration(InputStream is) +throws IOException, SecurityException { + +checkAccess(); +reset(); + +readConfiguration(is, Thread.currentThread().getContextClassLoader()); + +} + // -- Protected Methods @@ -261,108 +257,165 @@ * @param classLoader The classloader for which we will retrieve or build the *configuration */ -protected ClassLoaderLogInfo getClassLoaderInfo(final ClassLoader classLoader) { +protected
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/03/22 02:29:47 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java Log: - Add some better logging for the critical errors. To avoid possible problems, this is logged to the standard streams, rather than to another logger. Revision ChangesPath 1.9 +9 -6 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ClassLoaderLogManager.java7 Mar 2005 13:26:59 - 1.8 +++ ClassLoaderLogManager.java22 Mar 2005 10:29:47 - 1.9 @@ -250,7 +250,7 @@ return result; } - + // -- Protected Methods @@ -295,7 +295,8 @@ try { info.props.load(is); } catch (IOException e) { -// FIXME: Report this using the main logger ? +// Report error +System.err.println(Configuration error); e.printStackTrace(); } finally { try { @@ -337,7 +338,8 @@ localRootLogger.addHandler(handler); } } catch (Exception e) { -// FIXME: Report this using the main logger ? +// Report error +System.err.println(Handler error); e.printStackTrace(); } } @@ -378,7 +380,7 @@ }); } - + // LogNode Inner Class @@ -447,6 +449,7 @@ } + // ClassLoaderInfo Inner Class @@ -461,7 +464,7 @@ } } - + // - RootLogger Inner Class @@ -476,5 +479,5 @@ } } - + } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/03/07 05:26:59 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java Log: - private - protected. Revision ChangesPath 1.8 +11 -11 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ClassLoaderLogManager.java4 Mar 2005 15:33:41 - 1.7 +++ ClassLoaderLogManager.java7 Mar 2005 13:26:59 - 1.8 @@ -38,7 +38,7 @@ /** * Per classloader LogManager implementation. */ -public final class ClassLoaderLogManager extends LogManager { +public class ClassLoaderLogManager extends LogManager { // -- Variables @@ -49,14 +49,14 @@ * weak hashmap is used to ensure no classloader reference is leaked from * application redeployment. */ -private final Map classLoaderLoggers = new WeakHashMap(); +protected final Map classLoaderLoggers = new WeakHashMap(); /** * This prefix is used to allow using prefixes for the properties names * of handlers and their subcomponents. */ -private ThreadLocal prefix = new ThreadLocal(); +protected ThreadLocal prefix = new ThreadLocal(); // - Public Methods @@ -251,7 +251,7 @@ } -// Private Methods +// -- Protected Methods /** @@ -261,7 +261,7 @@ * @param classLoader The classloader for which we will retrieve or build the *configuration */ -private ClassLoaderLogInfo getClassLoaderInfo(final ClassLoader classLoader) { +protected ClassLoaderLogInfo getClassLoaderInfo(final ClassLoader classLoader) { ClassLoaderLogInfo info = (ClassLoaderLogInfo) classLoaderLoggers .get(classLoader); @@ -368,7 +368,7 @@ * @param logger * @param parent */ -private static void doSetParentLogger(final Logger logger, +protected static void doSetParentLogger(final Logger logger, final Logger parent) { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { @@ -382,12 +382,12 @@ // LogNode Inner Class -private static final class LogNode { +protected static final class LogNode { Logger logger; -private final Map children = new HashMap(); +protected final Map children = new HashMap(); -private final LogNode parent; +protected final LogNode parent; LogNode(final LogNode parent, final Logger logger) { this.parent = parent; @@ -450,7 +450,7 @@ // ClassLoaderInfo Inner Class -private static final class ClassLoaderLogInfo { +protected static final class ClassLoaderLogInfo { final LogNode rootNode; final Map loggers = new HashMap(); final Map handlers = new HashMap(); @@ -470,7 +470,7 @@ * This class is needed to instantiate the root of each per classloader * hierarchy. */ -private class RootLogger extends Logger { +protected class RootLogger extends Logger { public RootLogger() { super(, null); } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/03/04 06:59:19 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java Log: - Fix NPEs when context CL is null, which occurs in JNI mode (cool feature ...). Revision ChangesPath 1.6 +28 -20 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ClassLoaderLogManager.java3 Mar 2005 13:34:17 - 1.5 +++ ClassLoaderLogManager.java4 Mar 2005 14:59:19 - 1.6 @@ -40,20 +40,6 @@ */ public final class ClassLoaderLogManager extends LogManager { -private static void doSetParentLogger(final Logger logger, -final Logger parent) { -if (System.getSecurityManager() != null) { -AccessController.doPrivileged(new PrivilegedAction() { -public Object run() { -logger.setParent(parent); -return null; -} -}); -} else { -logger.setParent(parent); -} -} - private final Map classLoaderLoggers = new WeakHashMap(); private Logger rootLogger; @@ -86,6 +72,9 @@ } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); +if (classLoader == null) { +return super.addLogger(logger); +} ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); if (info.loggers.containsKey(loggerName)) { return false; @@ -196,6 +185,9 @@ } final ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); +if (classLoader == null) { +return super.getLogger(name); +} final Map loggers = getClassLoaderInfo(classLoader).loggers; return (Logger) loggers.get(name); } @@ -208,6 +200,9 @@ } final ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); +if (classLoader == null) { +return super.getLoggerNames(); +} final Map loggers = getClassLoaderInfo(classLoader).loggers; return Collections.enumeration(loggers.keySet()); } @@ -218,12 +213,15 @@ * context. */ public String getProperty(String name) { +final ClassLoader classLoader = Thread.currentThread() +.getContextClassLoader(); +if (classLoader == null) { +return super.getProperty(name); +} String prefix = (String) this.prefix.get(); if (prefix != null) { name = prefix + name; } -final ClassLoader classLoader = Thread.currentThread() -.getContextClassLoader(); ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); String result = info.props.getProperty(name); // If the property was not found, and the current classloader had no @@ -264,10 +262,6 @@ private ClassLoaderLogInfo getClassLoaderInfo(final ClassLoader classLoader) { -if (classLoader == null) { -return null; -} - ClassLoaderLogInfo info = (ClassLoaderLogInfo) classLoaderLoggers .get(classLoader); if (info == null) { @@ -365,6 +359,20 @@ return info; } +private static void doSetParentLogger(final Logger logger, +final Logger parent) { +if (System.getSecurityManager() != null) { +AccessController.doPrivileged(new PrivilegedAction() { +public Object run() { +logger.setParent(parent); +return null; +} +}); +} else { +logger.setParent(parent); +} +} + private static final class LogNode { Logger logger; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/03/04 07:33:41 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java Log: - Cleanup. - Remove special root and global loggers handling (it seems useless to me). global will simply delegate, so that it will always use the JVM configuration. - Remove some if(securityManager), which is only really useful in the critical path (the methods concerned were already synchromized, so ...). Revision ChangesPath 1.7 +94 -76 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ClassLoaderLogManager.java4 Mar 2005 14:59:19 - 1.6 +++ ClassLoaderLogManager.java4 Mar 2005 15:33:41 - 1.7 @@ -40,39 +40,40 @@ */ public final class ClassLoaderLogManager extends LogManager { -private final Map classLoaderLoggers = new WeakHashMap(); -private Logger rootLogger; +// -- Variables + + +/** + * Map containing the classloader information, keyed per classloader. A + * weak hashmap is used to ensure no classloader reference is leaked from + * application redeployment. + */ +private final Map classLoaderLoggers = new WeakHashMap(); -private Logger globalLogger; +/** + * This prefix is used to allow using prefixes for the properties names + * of handlers and their subcomponents. + */ private ThreadLocal prefix = new ThreadLocal(); + +// - Public Methods + + +/** + * Add the specified logger to the classloader local configuration. + * + * @param logger The logger to be added + */ public synchronized boolean addLogger(final Logger logger) { + final String loggerName = logger.getName(); -if (.equals(loggerName)) { -final boolean unset = rootLogger == null; -if (unset) { -rootLogger = logger; -if (globalLogger != null) { -doSetParentLogger(globalLogger, rootLogger); -} -} -return unset; -} -if (global.equals(loggerName)) { -final boolean unset = globalLogger == null; -if (unset) { -globalLogger = logger; -if (rootLogger != null) { -doSetParentLogger(globalLogger, rootLogger); -} -} -return unset; -} + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); -if (classLoader == null) { +if (classLoader == null || (global.equals(loggerName))) { return super.addLogger(logger); } ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); @@ -82,34 +83,22 @@ info.loggers.put(loggerName, logger); -// apply initial level for new logger -String levelString = getProperty(loggerName + .level); -final Level level; +// Apply initial level for new logger +final String levelString = getProperty(loggerName + .level); if (levelString != null) { -Level parsedLevel = null; try { -parsedLevel = Level.parse(levelString.trim()); -} catch (IllegalArgumentException e) { -// leave level set to null -} -level = parsedLevel; -} else { -level = null; -} -if (level != null) { -if (System.getSecurityManager() == null) { -logger.setLevel(level); -} else { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { -logger.setLevel(level); +logger.setLevel(Level.parse(levelString.trim())); return null; } }); +} catch (IllegalArgumentException e) { +// Leave level set to null } } -// if any parent loggers have levels definied, make sure they are +// If any parent loggers have levels definied, make sure they are // instantiated int dotIndex = loggerName.lastIndexOf('.'); while (dotIndex = 0) { @@ -121,17 +110,17 @@ dotIndex = loggerName.lastIndexOf('.',
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java
remm2005/03/03 05:34:17 Modified:.build.xml juli/src/java/org/apache/juli ClassLoaderLogManager.java Added: resources logging.properties Log: - Add a sample default configuration. Webapps can use their own configuration by having a logging.properties in their own classloader. - Properly parse and set handlers. - Fix useParentHandlers initialization (it tended to be always set to false). - The necessary system property is not present yet, however (-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager is needed in JAVA_OPTS or CATALINA_OPTS). Some hacking of the startup scripts is needed. Revision ChangesPath 1.225 +3 -0 jakarta-tomcat-5/build.xml Index: build.xml === RCS file: /home/cvs/jakarta-tomcat-5/build.xml,v retrieving revision 1.224 retrieving revision 1.225 diff -u -r1.224 -r1.225 --- build.xml 2 Mar 2005 18:36:29 - 1.224 +++ build.xml 3 Mar 2005 13:34:17 - 1.225 @@ -307,6 +307,9 @@ /fileset /jar + copy file=${basedir}/resources/logging.properties + todir=${tomcat.build}/common/classes / + /target target name=build-jasper 1.1 jakarta-tomcat-5/resources/logging.properties Index: logging.properties === handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler # Handler specific properties. # Describes specific configuration info for Handlers. 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost. 3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager. 4admin.org.apache.juli.FileHandler.level = FINE 4admin.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 4admin.org.apache.juli.FileHandler.prefix = admin. java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Facility specific properties. # Provides extra control for each logger. org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler, 2localhost.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].handlers = 4admin.org.apache.juli.FileHandler # For example, set the com.xyz.foo logger to only log SEVERE # messages: #org.apache.catalina.startup.ContextConfig.level = FINE #org.apache.catalina.startup.HostConfig.level = FINE #org.apache.catalina.session.ManagerBase.level = FINE 1.5 +30 -47 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ClassLoaderLogManager.java3 Mar 2005 01:51:12 - 1.4 +++ ClassLoaderLogManager.java3 Mar 2005 13:34:17 - 1.5 @@ -84,9 +84,9 @@ } return unset; } -final ClassLoader classLoader = Thread.currentThread() -.getContextClassLoader(); -final ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); +ClassLoader classLoader = +Thread.currentThread().getContextClassLoader(); +ClassLoaderLogInfo info =
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java
remm2005/03/02 13:40:00 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java Log: - The java.util.logging javadocs imply that the configuration of the handler (filter, formatter, etc) should be done by the handler itself. Revision ChangesPath 1.2 +30 -3 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ClassLoaderLogManager.java2 Mar 2005 18:30:45 - 1.1 +++ ClassLoaderLogManager.java2 Mar 2005 21:40:00 - 1.2 @@ -16,13 +16,23 @@ package org.apache.juli; -import java.util.logging.*; -import java.util.*; import java.io.IOException; import java.io.InputStream; import java.net.URLClassLoader; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; +import java.util.WeakHashMap; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.Logger; /** @@ -294,12 +304,29 @@ this.prefix.set(prefix); Handler handler = (Handler) classLoader.loadClass(handlerClassName).newInstance(); -this.prefix.set(null); +// FIXME: The specification strongly implies this should be done in the +// handler configuration +/* +// Initialize handler's level String handlerLevel = info.props.getProperty(handlerName + .level); if (handlerLevel != null) { handler.setLevel(Level.parse(handlerLevel.trim())); } +// Initialize filter +String filterName = +info.props.getProperty(handlerName + .filter); +if (filterName != null) { +try { +handler.setFilter +((Filter) classLoader.loadClass(filterName).newInstance()); +} catch (Exception e) { +// FIXME: Report this using the main logger ? +// Ignore +} +} +*/ +this.prefix.set(null); info.handlers.put(handlerName, handler); if (rootHandlers == null) { localRootLogger.addHandler(handler); 1.2 +37 -8 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java Index: FileHandler.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- FileHandler.java 2 Mar 2005 18:30:45 - 1.1 +++ FileHandler.java 2 Mar 2005 21:40:00 - 1.2 @@ -23,7 +23,10 @@ import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.logging.ErrorManager; +import java.util.logging.Filter; +import java.util.logging.Formatter; import java.util.logging.Handler; +import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.LogRecord; import java.util.logging.SimpleFormatter; @@ -238,27 +241,53 @@ LogManager manager = LogManager.getLogManager(); String className = FileHandler.class.getName(); +ClassLoader cl = Thread.currentThread().getContextClassLoader(); + // Retrieve configuration of logging file name directory = getProperty(className + .directory, logs); prefix = getProperty(className + .prefix, juli.); suffix = getProperty(className + .suffix, .log); -// FIXME: Add filter configuration in LogManager ? -//setFilter(manager.getFilterProperty(className + .filter, null)); -//
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java
remm2005/03/02 16:23:00 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java Log: - Fix NPE caused by my last change. - Use ',' as separator for the handler lists. - Just noticed that java.util.logging does support a handlers property on loggers, and that I reinvented it (I had been looking at the JDK 1.4 config files all along). Revision ChangesPath 1.3 +4 -4 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ClassLoaderLogManager.java2 Mar 2005 21:40:00 - 1.2 +++ ClassLoaderLogManager.java3 Mar 2005 00:23:00 - 1.3 @@ -150,9 +150,9 @@ final String handlers = getProperty(loggerName + .handlers); if (handlers != null) { logger.setUseParentHandlers(false); -StringTokenizer tok = new StringTokenizer(handlers); +StringTokenizer tok = new StringTokenizer(handlers, ,); while (tok.hasMoreTokens()) { -String handlerName = (tok.nextToken()); +String handlerName = (tok.nextToken().trim()); Handler handler = (Handler) info.handlers.get(handlerName); if (handler != null) { logger.addHandler(handler); @@ -283,9 +283,9 @@ String rootHandlers = info.props.getProperty(.handlers); String handlers = info.props.getProperty(handlers); if (handlers != null) { -StringTokenizer tok = new StringTokenizer(handlers); +StringTokenizer tok = new StringTokenizer(handlers, ,); while (tok.hasMoreTokens()) { -String handlerName = (tok.nextToken()); +String handlerName = (tok.nextToken().trim()); String handlerClassName = handlerName; String prefix = ; if (handlerClassName.length() = 0) { 1.3 +4 -2 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java Index: FileHandler.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FileHandler.java 2 Mar 2005 21:40:00 - 1.2 +++ FileHandler.java 3 Mar 2005 00:23:00 - 1.3 @@ -297,8 +297,10 @@ String value = LogManager.getLogManager().getProperty(name); if (value == null) { value = defaultValue; +} else { +value = value.trim(); } -return value.trim(); +return value; } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java
remm2005/03/02 17:51:13 Modified:juli/src/java/org/apache/juli ClassLoaderLogManager.java FileHandler.java Log: - Implement delegation in getProperty (when the current classloader does not have any configuration). - Read useParentHandlers property. - Code cleanup in FileHandler. Revision ChangesPath 1.4 +31 -5 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java Index: ClassLoaderLogManager.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/ClassLoaderLogManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ClassLoaderLogManager.java3 Mar 2005 00:23:00 - 1.3 +++ ClassLoaderLogManager.java3 Mar 2005 01:51:12 - 1.4 @@ -159,6 +159,17 @@ } } } + +// Parse useParentHandlers to set if the logger should delegate to its parent. +// Unlike java.util.logging, the default is to not delegate if a list of handlers +// has been specified for the logger. +String useParentHandlersString = getProperty(loggerName + .useParentHandlers); +if ((useParentHandlersString != null) + (!Boolean.valueOf(useParentHandlersString).booleanValue())) { +logger.setUseParentHandlers(false); +} else { +logger.setUseParentHandlers(true); +} return true; } @@ -216,11 +227,26 @@ } final ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); -String result = -getClassLoaderInfo(classLoader).props.getProperty(name); -if (result == null) { -// FIXME: Look in parent classloader ? Probably not. -result = super.getProperty(name); +ClassLoaderLogInfo info = getClassLoaderInfo(classLoader); +String result = info.props.getProperty(name); +// If the property was not found, and the current classloader had no +// configuration (property list is empty), look for the parent classloader +// properties. +if ((result == null) (info.props.isEmpty())) { +ClassLoader current = classLoader.getParent(); +while (current != null) { +info = (ClassLoaderLogInfo) classLoaderLoggers.get(current); +if (info != null) { +result = info.props.getProperty(name); +if ((result != null) || (!info.props.isEmpty())) { +break; +} +} +current = current.getParent(); +} +if (result == null) { +result = super.getProperty(name); +} } // Simple property replacement (mostly for folder names) if (result != null) { 1.4 +11 -72 jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java Index: FileHandler.java === RCS file: /home/cvs/jakarta-tomcat-connectors/juli/src/java/org/apache/juli/FileHandler.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- FileHandler.java 3 Mar 2005 00:23:00 - 1.3 +++ FileHandler.java 3 Mar 2005 01:51:12 - 1.4 @@ -20,7 +20,6 @@ import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.logging.ErrorManager; import java.util.logging.Filter; @@ -51,6 +50,14 @@ open(); } + +public FileHandler(String directory, String prefix, String suffix) { +this(); +this.directory = directory; +this.prefix = prefix; +this.suffix = suffix; +} + // - Instance Variables @@ -86,63 +93,6 @@ private PrintWriter writer = null; -// - Properties - - -/** - * Return the directory in which we create log files. -public String getDirectory() { -return (directory); -} - */ - - -/** - * Set the directory in which we create log files. - * - * @param directory The new log file directory -public void setDirectory(String directory) { -this.directory = directory; -} - */ - - -/** - * Return the log file prefix. -public String getPrefix() { -return (prefix); -} - */ - - -/** -