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

How can I set individual log levels in different Java classes?

(我是 Java 的新手,我已经阅读了 java.util.logging: how to set level by logger package (or prefix)?。因为它无法回答我的问题,就在这里)

我正在开发一个系统,该系统在多个 class 中具有 private static final Logger log = Logger.getLogger(XXX.class.getName()); 属性(XXX 是相应的 class)。

我将 log.setLevel(level) 与不同的 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 class 级别的日志仍然在 CONFIG...

Printing the log itself, seems to indicate that the individual log objects are actually the same. I don't understand why.

ParserTokenizer 正在调用 Logger.getLogger(XXX.class.getName()); 同名 XXX class。修改您的代码示例以打印记录器的 name

Debug output is like this

这是 Minimal, Complete, and Verifiable example 帮助我的地方。级别用于限定消息,级别用于过滤消息。如果您至少不包括产生调试输出的代码,则很难说出列出的每个级别的含义。

您似乎混淆了记录器的过滤级别和消息的记录级别。

每个记录器都有一个记录级别,作为消息的过滤器; 以低于记录器过滤级别的级别记录的消息将被忽略。

这是一个示例(不是实际代码):

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");

上面的 "code" 将在日志文件中产生以下消息:

fine grained log message
info level message
second fine message

注意消息"finest level of logging"不会出现在日志中,因为FINEST级别低于FINE,因此被记录器过滤掉。