Java 日志级别困惑

标签 java logging java.util.logging

我将日志记录级别设置为 CONFIG,但看不到写在 CONFIG 级别的消息。我缺少什么?

配置:

Logger logger = java.util.logging.Logger.getLogger("xxx");
logger.setLevel(java.util.logging.Level.CONFIG);

测试:

logger.log(java.util.logging.Level.SEVERE, "severe");
logger.log(java.util.logging.Level.WARNING, "warning");
logger.log(java.util.logging.Level.INFO, "info");
logger.log(java.util.logging.Level.CONFIG, "config");
logger.log(java.util.logging.Level.FINE, "fine");
logger.log(java.util.logging.Level.FINER, "finer");
logger.log(java.util.logging.Level.FINEST, "finest");

输出:

SEVERE: severe
WARNING: warning
INFO: info

最佳答案

我通常使用 logback实现日志记录,这似乎有更好的记录。所以我建议改用那个。

但为了回答您的问题,我认为发生的情况是您的 Logger 配置正确,但它向其发送消息的 Handler 却配置不正确。默认配置可能将具有 INFO 级别日志记录的处理程序附加到根记录器。

编辑:我写了一个小测试程序来验证,你确实需要在附加到根记录器的处理程序上设置级别。您可以这样做:

for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.CONFIG);
}
logger.config("config");

给出输出:

Feb 11, 2011 4:32:14 PM Test main
CONFIG: config

这为附加到此的所有处理程序设置了级别。显然更好的选择是编写您自己的选项文件并显式配置您的记录器。一个快速谷歌出现了this article关于这个问题。

您还可以尝试在您的类路径上使用属性文件进行配置,该文件内容如下:

java.util.logging.ConsoleHandler.level=CONFIG

关于Java 日志级别困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970513/

相关文章:

.net - 我应该仅出于记录目的而重写 ToString 吗?

java - java.util.logger.setLevel() 和 handler.setLevel() 有什么区别?

c# - NLOG 和 Azure 表存储

java - 具有另一种数字格式的货币符号

java - Spring使用MySQL访问数据不会运行

java - Buffer 与 Unsafe - 在 JVM 之外

wcf - 跟踪对 WCF 服务进行的所有调用(及其堆栈)

java - 无法捕获 servlet 中的主键异常

tomcat - 如何使用 slf4j 和 java.util.logging 登录 tomcat

java - BigDecimal 和价格缩放