在使用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生效。