我有一个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
应该只写入文件。但是我在控制台中同时获得INFO
和DEBUG
级别。我做错了什么?
答案 0 :(得分:0)
因为INFO级别涵盖了DEBUG级别。所以你们都看到了。
查看更多Logging Levels
答案 1 :(得分:0)
如果您检查log4j doc或this 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将根据需要重新路由到文件。