情况:我有这个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()))
知道为什么会这样吗?
答案 0 :(得分:2)
您的appender配置的阈值大于debug,因此虽然记录器不会忽略这些条目,但您的appender不会记录它。您还需要通过配置文件或以编程方式将ConsoleAppender
的阈值配置为DEBUG
:
((ConsoleAppender)someLogger.getAppender("CONSOLE")).setThreshold(Level.DEBUG);
配置文件通常是更优雅的解决方案。
修改:请注意,显然是AppenderSkeleton
的任何子类(包括ConsoleAppender
)shouldn't have a threshold filter set by default。因此,正如@justkt暗示的那样,你的配置中的某个地方可能正在手动为该appender分配一个阈值(> Debug)。