如何在不同的Java类中设置单个日志级别?

时间:2018-04-19 09:29:33

标签: java java.util.logging log-level

(我刚接触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 ...

上进行记录

2 个答案:

答案 0 :(得分:1)

  

打印日志本身似乎表明各个日志对象实际上是相同的。我不明白为什么。

ParserTokenizer正在使用相同名称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,因此会被记录器过滤掉。