From 8b05b16c8ad9d51a230f2ba94bcf3dd39d2d5484 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 28 Aug 2011 18:47:13 +0000 Subject: [PATCH] * Log: Fix level stuck at DEBUG when called from constructor --- core/java/src/net/i2p/util/Log.java | 28 +++++++++++++++------- core/java/src/net/i2p/util/LogManager.java | 11 +++++++-- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/core/java/src/net/i2p/util/Log.java b/core/java/src/net/i2p/util/Log.java index 6ce320c9d..753f762d4 100644 --- a/core/java/src/net/i2p/util/Log.java +++ b/core/java/src/net/i2p/util/Log.java @@ -23,12 +23,12 @@ import net.i2p.I2PAppContext; * @author jrandom */ public class Log { - private Class _class; - private String _className; - private String _name; + private final Class _class; + private final String _className; + private final String _name; private int _minPriority; - private LogScope _scope; - private LogManager _manager; + private final LogScope _scope; + private final LogManager _manager; public final static int DEBUG = 10; public final static int INFO = 20; @@ -69,11 +69,19 @@ public class Log { return (level > CRIT ? STR_CRIT : STR_DEBUG); } + /** + * Warning - not recommended. + * Use I2PAppContext.getGlobalContext().logManager().getLog(cls) + */ public Log(Class cls) { this(I2PAppContext.getGlobalContext().logManager(), cls, null); _manager.addLog(this); } + /** + * Warning - not recommended. + * Use I2PAppContext.getGlobalContext().logManager().getLog(name) + */ public Log(String name) { this(I2PAppContext.getGlobalContext().logManager(), null, name); _manager.addLog(this); @@ -190,19 +198,23 @@ public class Log { if (name == null) return cls.getName(); return name + "" + cls.getName(); } + private static final class LogScope { - private String _scopeName; - private Class _scopeClass; - private String _scopeCache; + private final String _scopeName; + private final Class _scopeClass; + private final String _scopeCache; + public LogScope(String name, Class cls) { _scopeName = name; _scopeClass = cls; _scopeCache = getScope(name, cls); } + @Override public int hashCode() { return _scopeCache.hashCode(); } + @Override public boolean equals(Object obj) { if (obj == null) diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 55b454da4..dbdbea8ef 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -179,10 +179,17 @@ public class LogManager { return new ArrayList(_logs.values()); } + /** + * If the log already exists, its priority is set here but cannot + * be changed later, as it becomes an "orphan" not tracked by the manager. + */ void addLog(Log log) { Log old = _logs.putIfAbsent(log.getScope(), log); - if (old == null) - updateLimit(log); + updateLimit(log); + if (old != null) { + if (_log.shouldLog(Log.INFO)) + _log.info("Duplicate log for " + log.getName()); + } } public LogConsoleBuffer getBuffer() { return _consoleBuffer; }