0

(我是 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)不同level的 s,但所有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类日志CONFIG...

4

2 回答 2

1

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

Parser并使用相同的名称类Tokenizer调用。修改您的代码示例以打印记录器的名称Logger.getLogger(XXX.class.getName());XXX

调试输出是这样的

这就是一个最小的、完整的和可验证的例子对我有帮助的地方。级别用于限定消息,级别用于过滤消息。如果您至少不包含生成调试输出的代码,则很难说出列出的每个级别的含义。

于 2018-04-20T14:23:27.257 回答
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并因此被记录器过滤掉。

于 2018-04-20T14:37:20.120 回答