为什么我在控制台中获得DEBUG级别的日志记录?

时间:2017-07-28 07:17:45

标签: java logging log4j

我有一个log4j属性文件定义如下:

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.logger.com.github.user=DEBUG, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=target/cucumber-parser.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

根据我的理解,INFO级别日志记录应该路由到stdout(控制台),而DEBUG应该只写入文件。但是我在控制台中同时获得INFODEBUG级别。我做错了什么?

4 个答案:

答案 0 :(得分:0)

因为INFO级别涵盖了DEBUG级别。所以你们都看到了。

查看更多Logging Levels

答案 1 :(得分:0)

如果您检查log4j docthis tutorial,您可以看到有关关卡的更多信息,但基本上是:ALL< DEBUG<信息<警告<错误<致命< OFF

因此,日志显示所选级别和所有涂层。

答案 2 :(得分:0)

添加log4j.additivity.com.github.user=false

与配置一样,com.github.user的级别设置为调试。除了" file"之外,它还将添加到根记录器中,因此您可以在控制台中看到com.github.user的调试日志。

事实上,如果你以这种方式编写配置,拆分记录器和追加器,你可以更好地理解。

log4j.rootLogger=INFO, stdout
log4j.logger.com.github.user=DEBUG, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=target/cucumber-parser.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

对于记录器,您指定com.github.user进行调试,将所有其他信息指定为rootlogger设置。

然后com.github.user将打印到file,所有日志都将打印到控制台。如果您设置了additivity,则com.github.user将从rootlogger中删除,因此控制台中只会有其他日志。

答案 3 :(得分:0)

我设法通过将以下行应用于log4j.appender.stdout来解决我的问题:

log4j.appender.stdout.Threshold=INFO

将此行添加到我在原始问题中发布的原始配置中,只有INFO级别日志将打印到控制台,DEBUG将根据需要重新路由到文件。