From 3d18355fbc28e8d55b97ae05193b4adb27fff250 Mon Sep 17 00:00:00 2001 From: tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue, 19 Sep 2006 16:23:34 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117058 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 10 ++ libjava/java/util/logging/LogManager.java | 113 +++++++++++++++++----- 2 files changed, 101 insertions(+), 22 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 92cbfb7cbad3..27f582db7333 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. diff --git a/libjava/java/util/logging/LogManager.java b/libjava/java/util/logging/LogManager.java index 1c420692e1b3..b8b31c43cb6f 100644 --- a/libjava/java/util/logging/LogManager.java +++ b/libjava/java/util/logging/LogManager.java @@ -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 @@ -107,11 +108,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; + } } -- GitLab