2011-02-11 146 views
3

我将日志记录级别设置为CONFIG,但没有看到写在CONFIG级别上的消息。我错过了什么?Java日志记录级别混淆

配置:

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 
+1

哪个你实际设置您的日志级别,`INFO`或`CONFIG`?你的问题包含冲突的信息。 – 2011-02-11 15:09:23

+0

Ups,对不起。我将日志级别设置为CONFIG。 – alex2k8 2011-02-11 15:12:59

回答

7

我通常使用logback来实现日志记录,这似乎更好记录。所以我会建议切换到。

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

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

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

给出的输出:

2011年2月11日下午4点32分14秒的测试主要
CONFIG:配置

这台所有与此相关的处理程序的级别。显然,更好的选择是编写自己的选项文件并明确配置你的记录器。一个快速谷歌在这个问题上出现了this article

您也可以尝试与配置性能在classpath文件,上面写着:

java.util.logging.ConsoleHandler.level=CONFIG 
1

这是预期的行为。

当您定义一个日志级别时,您将看到此级别的所有日志,但也会看到链接到较高级别的所有日志。

的顺序如下:

  • 严重(最高值)
  • 警告
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST(最低值)

所以你的情况,如果你定义级别INFO,你只会看到SEVEREWARNINGINFO日志,而不是CONFIG消息。


编辑,回答你纠正问题:

也许一个第三方库用于您的Logger类(log4j的,SLF4J,等等),和这个库定义了自己的水平登录。例如,对于log4j的,只有以下级别:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • 致命

在这种情况下,电平CONFIG是视为INFO级别,这解释了您当前的行为。