[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:
parent
7ab629664b
commit
19db9631bc
|
@ -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>
|
2006-09-18 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* configure: Rebuilt.
|
* configure: Rebuilt.
|
||||||
|
|
|
@ -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;
|
||||||
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
|
||||||
|
@ -107,11 +108,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,24 +318,21 @@ 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()))
|
||||||
{
|
.get();
|
||||||
Logger possChild = (Logger) ((WeakReference) loggers.get(iter.next()))
|
if ((possChild == null) || (possChild == logger)
|
||||||
.get();
|
|| (possChild.getParent() != parent))
|
||||||
if ((possChild == null) || (possChild == logger)
|
continue;
|
||||||
|| (possChild.getParent() != parent))
|
|
||||||
continue;
|
if (! possChild.getName().startsWith(name))
|
||||||
|
continue;
|
||||||
if (! possChild.getName().startsWith(name))
|
|
||||||
continue;
|
if (possChild.getName().charAt(name.length()) != '.')
|
||||||
|
continue;
|
||||||
if (possChild.getName().charAt(name.length()) != '.')
|
|
||||||
continue;
|
possChild.setParent(logger);
|
||||||
|
|
||||||
possChild.setParent(logger);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue