在使用slf4j进行日志输出的时候,发现这样一个问题。
当使用如下的log level设置的时候,所有“abc.def”包中通过Logger.info()输出的日志在"STDOUT"和"ROLLING_FILE" appender中都会打印两次。("STDOUT"是控制台,"ROLLING_FILE"是自定义的日志文件。)
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="ROLLING_FILE" />
</root>
<logger name="abc.def" level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="ROLLING_FILE" />
</logger>
我考虑了一下,觉得问题的原因是:root lever logger和specific logger的打印是各自独立的,而不是我原来认为的“如果为abc.def包设定了specific logger则root level logger就不会打印(互斥)”。
因此我把配置改成了:
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<logger name="abc.def" level="INFO">
<appender-ref ref="ROLLING_FILE" />
</logger>
改完之后的日志行为是:abc.def包中的info level的日志会同时出现在"STDOUT"和"ROLLING_FILE" appender中,而其他package的日志只会出现在"STDOUT"中,这正是我想要的。
这说明:root level logger是会对所有Logger输出都有效的,而specific logger只会对设定的package生效。
本文探讨了在使用SLF4J进行日志输出时遇到的问题及解决方法。详细解释了如何通过调整日志级别配置避免重复打印,并阐述了root logger与specific logger的区别。
664

被折叠的 条评论
为什么被折叠?



