[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
2 changed files with 101 additions and 22 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue