2006-09-19 Mark Wielaard <mark@klomp.org>
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Sep 2006 16:23:34 +0000 (16:23 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Sep 2006 16:23:34 +0000 (16:23 +0000)
Fixes bug #29137
* java/util/logging/LogManager.java (addLogger): Always check for
existing children of a new Logger.

2006-09-19  Tom Tromey  <tromey@redhat.com>

* java/util/logging/LogManager.java: Re-merged with Classpath.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117058 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/util/logging/LogManager.java

index 92cbfb7..27f582d 100644 (file)
@@ -1,3 +1,13 @@
+2006-09-19  Mark Wielaard  <mark@klomp.org>
+
+       Fixes bug #29137
+       * java/util/logging/LogManager.java (addLogger): Always check for
+       existing children of a new Logger.
+
+2006-09-19  Tom Tromey  <tromey@redhat.com>
+
+       * java/util/logging/LogManager.java: Re-merged with Classpath.
+
 2006-09-18  Tom Tromey  <tromey@redhat.com>
 
        * configure: Rebuilt.
index 1c42069..b8b31c4 100644 (file)
@@ -39,6 +39,8 @@ exception statement from your version. */
 
 package java.util.logging;
 
+import gnu.classpath.SystemProperties;
+
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.io.ByteArrayInputStream;
@@ -50,12 +52,11 @@ import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
 
-import gnu.classpath.SystemProperties;
-
 /**
  * The <code>LogManager</code> maintains a hierarchical namespace
  * of Logger objects and manages properties for configuring the logging
@@ -108,11 +109,23 @@ import gnu.classpath.SystemProperties;
 public class LogManager
 {
   /**
+   * The object name for the logging management bean.
+   * @since 1.5
+   */
+  public static final String LOGGING_MXBEAN_NAME
+    = "java.util.logging:type=Logging";
+
+  /**
    * The singleton LogManager instance.
    */
   private static LogManager logManager;
 
   /**
+   * The singleton logging bean.
+   */
+  private static LoggingMXBean loggingBean;
+
+  /**
    * The registered named loggers; maps the name of a Logger to
    * a WeakReference to it.
    */
@@ -305,24 +318,21 @@ public class LogManager
      * When adding "foo.bar", the logger "foo.bar.baz" should change
      * its parent to "foo.bar".
      */
-    if (parent != Logger.root)
+    for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
       {
-       for (Iterator iter = loggers.keySet().iterator(); iter.hasNext();)
-         {
-           Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
-              .get();
-           if ((possChild == null) || (possChild == logger)
-               || (possChild.getParent() != parent))
-             continue;
-
-           if (! possChild.getName().startsWith(name))
-             continue;
-
-           if (possChild.getName().charAt(name.length()) != '.')
-             continue;
-
-           possChild.setParent(logger);
-         }
+       Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
+         .get();
+       if ((possChild == null) || (possChild == logger)
+           || (possChild.getParent() != parent))
+         continue;
+       
+       if (! possChild.getName().startsWith(name))
+         continue;
+       
+       if (possChild.getName().charAt(name.length()) != '.')
+         continue;
+       
+       possChild.setParent(logger);
       }
 
     return true;
@@ -836,11 +846,11 @@ public class LogManager
       }
     catch (ClassNotFoundException e)
       {
-        warn(property, className, "class not found");
+        warn(property, className, "class not found", e);
       }
     catch (IllegalAccessException e)
       {
-        warn(property, className, "illegal access");
+        warn(property, className, "illegal access", e);
       }
     catch (InstantiationException e)
       {
@@ -848,7 +858,7 @@ public class LogManager
       }
     catch (java.lang.LinkageError e)
       {
-        warn(property, className, "linkage error");
+        warn(property, className, "linkage error", e);
       }
 
     return null;
@@ -909,4 +919,63 @@ public class LogManager
       }
   }
 
+  /**
+   * Return the logging bean.  There is a single logging bean per
+   * VM instance.
+   * @since 1.5
+   */
+  public static synchronized LoggingMXBean getLoggingMXBean()
+  {
+    if (loggingBean == null)
+      {
+        loggingBean = new LoggingMXBean()
+        {
+          public String getLoggerLevel(String logger)
+          {
+            LogManager mgr = getLogManager();
+            Logger l = mgr.getLogger(logger);
+            if (l == null)
+              return null;
+            Level lev = l.getLevel();
+            if (lev == null)
+              return "";
+            return lev.getName();
+          }
+
+          public List getLoggerNames()
+          {
+            LogManager mgr = getLogManager();
+            // This is inefficient, but perhaps better for maintenance.
+            return Collections.list(mgr.getLoggerNames());
+          }
+
+          public String getParentLoggerName(String logger)
+          {
+            LogManager mgr = getLogManager();
+            Logger l = mgr.getLogger(logger);
+            if (l == null)
+              return null;
+            l = l.getParent();
+            if (l == null)
+              return "";
+            return l.getName();
+          }
+
+          public void setLoggerLevel(String logger, String level)
+          {
+            LogManager mgr = getLogManager();
+            Logger l = mgr.getLogger(logger);
+            if (l == null)
+              throw new IllegalArgumentException("no logger named " + logger);
+            Level newLevel;
+            if (level == null)
+              newLevel = null;
+            else
+              newLevel = Level.parse(level);
+            l.setLevel(newLevel);
+          }
+        };
+      }
+    return loggingBean;
+  }
 }