[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
This commit is contained in:
Tom Tromey 2006-09-19 16:23:34 +00:00
parent 7ab629664b
commit 19db9631bc
2 changed files with 101 additions and 22 deletions

View 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.

View 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
@ -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;
}
}