Hi there,

I first ran into bug 39627 [1] when trying to get my logging working properly and got to have a pretty thorough read of the JULI code. I noticed that the readConfiguration(stream) method doesn't reset the configuration properly. It just calls a super.reset(), but the superclass doesn't know about the special per-classloader loggers.

Should I file a bug? I have a simple patch which just creates a new ClassLoaderLogInfo for every readConfiguration() call and lets the garbage collector to delete the old one.

I'm a bit confused about the way logging configuration is inherited by classloaders though. My patch doesn't reset any configuration in parent classloaders and I'm not sure what consequences this will have.

Roger

[1] http://issues.apache.org/bugzilla/show_bug.cgi?id=39627
--
----------------------------------------
Ninth Avenue Software
p: +61 7 3137 1351 (UTC +10)
f: +61 7 3102 9141
w: http://www.ninthavenue.com.au
e: [EMAIL PROTECTED]
----------------------------------------
Index: org/apache/juli/ClassLoaderLogManager.java
===================================================================
--- org/apache/juli/ClassLoaderLogManager.java  (revision 412714)
+++ org/apache/juli/ClassLoaderLogManager.java  (working copy)
@@ -241,7 +241,6 @@
         throws IOException, SecurityException {
         
         checkAccess();
-        reset();
 
         readConfiguration(is, Thread.currentThread().getContextClassLoader());
     
@@ -318,29 +317,18 @@
                 }
             }
         }
-        
-        Logger localRootLogger = new RootLogger();
-        if (is == null) {
-            // Retrieve the root logger of the parent classloader instead
-            ClassLoader current = classLoader.getParent();
-            ClassLoaderLogInfo info = null;
-            while (current != null && info == null) {
-                info = getClassLoaderInfo(current);
-                current = current.getParent();
-            }
-            if (info != null) {
-                localRootLogger.setParent(info.rootNode.logger);
-            }
-        }
-        ClassLoaderLogInfo info = 
-            new ClassLoaderLogInfo(new LogNode(null, localRootLogger));
-        info.loggers.put("", localRootLogger);
-        classLoaderLoggers.put(classLoader, info);
-        
+       
         if (is != null) {
             readConfiguration(is, classLoader);
+        } else {
+
+            /* empty logging tree */   
+            Logger localRootLogger = new RootLogger();
+            ClassLoaderLogInfo info = 
+                new ClassLoaderLogInfo(new LogNode(null, localRootLogger));
+            classLoaderLoggers.put(classLoader, info);
         }
-        
+
     }
     
     
@@ -354,9 +342,11 @@
     protected void readConfiguration(InputStream is, ClassLoader classLoader)
         throws IOException {
         
+        Logger localRootLogger = new RootLogger();
         ClassLoaderLogInfo info = 
-            (ClassLoaderLogInfo) classLoaderLoggers.get(classLoader);
-        
+            new ClassLoaderLogInfo(new LogNode(null, localRootLogger));
+        classLoaderLoggers.put(classLoader, info);
+         
         try {
             info.props.load(is);
         } catch (IOException e) {
@@ -372,7 +362,6 @@
         // Create handlers for the root logger of this classloader
         String rootHandlers = info.props.getProperty(".handlers");
         String handlers = info.props.getProperty("handlers");
-        Logger localRootLogger = info.rootNode.logger;
         if (handlers != null) {
             StringTokenizer tok = new StringTokenizer(handlers, ",");
             while (tok.hasMoreTokens()) {
@@ -423,6 +412,7 @@
             }
             
         }
+        addLogger(localRootLogger);
         
     }
     
@@ -487,6 +477,9 @@
 
         LogNode findNode(String name) {
             LogNode currentNode = this;
+            if (logger.getName().equals(name)) {
+                return this;
+            }
             while (name != null) {
                 final int dotIndex = name.indexOf('.');
                 final String nextName;
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to