Logger.setLevel()无法正确启用日志记录

时间:2011-01-04 13:58:54

标签: java log4j

情况:我有这个log4j记录器:

private static final Logger logger = Logger.getLogger(ThisClassName.class);

我正试图以编程方式设置它:

Logger.getLogger(ThisClassName.class).setLevel(Level.DEBUG);

仍然,DEBUG级别的打印是swalloed(同时INFO打印成功打印)。

即使这一点也无效:Logger.getRootLogger().setLevel(Level.DEBUG);

调用logger.debug(“foo”)到达Category.forcedLog()ConsoleAppender.doAppend(),然后在以下位置失败(退出):

if(!isAsSevereAsThreshold(event.getLevel()))

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

您的appender配置的阈值大于debug,因此虽然记录器不会忽略这些条目,但您的appender不会记录它。您还需要通过配置文件或以编程方式将ConsoleAppender的阈值配置为DEBUG

((ConsoleAppender)someLogger.getAppender("CONSOLE")).setThreshold(Level.DEBUG);

配置文件通常是更优雅的解决方案。

修改:请注意,显然是AppenderSkeleton的任何子类(包括ConsoleAppendershouldn't have a threshold filter set by default。因此,正如@justkt暗示的那样,你的配置中的某个地方可能正在手动为该appender分配一个阈值(> Debug)。