Commit 19db9631 by Tom Tromey

[multiple changes]

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.

From-SVN: r117058
parent 7ab62966
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> 2006-09-18 Tom Tromey <tromey@redhat.com>
* configure: Rebuilt. * configure: Rebuilt.
......
...@@ -39,6 +39,8 @@ exception statement from your version. */ ...@@ -39,6 +39,8 @@ exception statement from your version. */
package java.util.logging; package java.util.logging;
import gnu.classpath.SystemProperties;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
...@@ -50,12 +52,11 @@ import java.util.Collections; ...@@ -50,12 +52,11 @@ import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import gnu.classpath.SystemProperties;
/** /**
* The <code>LogManager</code> maintains a hierarchical namespace * The <code>LogManager</code> maintains a hierarchical namespace
* of Logger objects and manages properties for configuring the logging * of Logger objects and manages properties for configuring the logging
...@@ -108,11 +109,23 @@ import gnu.classpath.SystemProperties; ...@@ -108,11 +109,23 @@ import gnu.classpath.SystemProperties;
public class LogManager 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. * The singleton LogManager instance.
*/ */
private static LogManager logManager; private static LogManager logManager;
/** /**
* The singleton logging bean.
*/
private static LoggingMXBean loggingBean;
/**
* The registered named loggers; maps the name of a Logger to * The registered named loggers; maps the name of a Logger to
* a WeakReference to it. * a WeakReference to it.
*/ */
...@@ -305,8 +318,6 @@ public class LogManager ...@@ -305,8 +318,6 @@ public class LogManager
* When adding "foo.bar", the logger "foo.bar.baz" should change * When adding "foo.bar", the logger "foo.bar.baz" should change
* its parent to "foo.bar". * 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())) Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
...@@ -323,7 +334,6 @@ public class LogManager ...@@ -323,7 +334,6 @@ public class LogManager
possChild.setParent(logger); possChild.setParent(logger);
} }
}
return true; return true;
} }
...@@ -836,11 +846,11 @@ public class LogManager ...@@ -836,11 +846,11 @@ public class LogManager
} }
catch (ClassNotFoundException e) catch (ClassNotFoundException e)
{ {
warn(property, className, "class not found"); warn(property, className, "class not found", e);
} }
catch (IllegalAccessException e) catch (IllegalAccessException e)
{ {
warn(property, className, "illegal access"); warn(property, className, "illegal access", e);
} }
catch (InstantiationException e) catch (InstantiationException e)
{ {
...@@ -848,7 +858,7 @@ public class LogManager ...@@ -848,7 +858,7 @@ public class LogManager
} }
catch (java.lang.LinkageError e) catch (java.lang.LinkageError e)
{ {
warn(property, className, "linkage error"); warn(property, className, "linkage error", e);
} }
return null; return null;
...@@ -909,4 +919,63 @@ public class LogManager ...@@ -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;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment