(我刚接触Java,我已经阅读了java.util.logging: how to set level by logger package (or prefix)?。由于它无法回答我的问题,这里就是这样)
我正在开发一个在多个类中具有private static final Logger log = Logger.getLogger(XXX.class.getName());
属性的系统(XXX
是相应的类)。
我使用不同log.setLevel(level)
的{{1}},但所有level
个对象似乎都在相同的日志级别工作。打印log
本身似乎表明单个log
对象实际上是相同的。我不明白为什么。
调试输出如下:
log
[CONFIG ]...Parser init: java.util.logging.Logger@6bc7c054 logging level FINE
[CONFIG ]...Tokenizer init: java.util.logging.Logger@6bc7c054 logging level CONFIG
类仍然会在级别Parser
...
答案 0 :(得分:1)
打印日志本身似乎表明各个日志对象实际上是相同的。我不明白为什么。
Parser
和Tokenizer
正在使用相同名称Logger.getLogger(XXX.class.getName());
类调用XXX
。修改代码示例以打印记录器的name。
调试输出就像这样
这是Minimal, Complete, and Verifiable example帮助我的地方。级别用于限定消息,级别用于过滤消息。如果您至少不包含产生调试输出的代码,则很难说出列出的每个级别的含义。
答案 1 :(得分:0)
您似乎混淆了Logger的过滤级别和邮件的日志记录级别。
每个记录器都有一个记录级别,用作消息的过滤器; 将忽略以低于记录器过滤级别的级别记录的消息。
以下是一个示例(非实际代码):
Logger myLogger = Logger.getLogger("somename");
myLogger.setLevel(FINE);
myLogger.fine("fine grained log message");
myLogger.finest("finest level of logging");
myLogger.info("info level message");
myLogger.fine("second fine message");
"代码"以上将在日志文件中生成以下消息:
fine grained log message
info level message
second fine message
请注意消息"最好的日志级别"不会出现在日志中,因为FINEST
级别低于FINE
,因此会被记录器过滤掉。