Gangmax Blog

使用slf4j框架发生重复日志问题

Migarated from here at ‘2012-06-04 17:16:25’.

在使用slf4j进行日志输出的时候,发现这样一个问题。

当使用如下的log level设置的时候,所有“abc.def”包中通过Logger.info()输出的日志在”STDOUT”和”ROLLING_FILE” appender中都会打印两次。(”STDOUT”是控制台,”ROLLING_FILE”是自定义的日志文件。)

1
2
3
4
5
6
7
8
<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就不会打印(互斥)”。

因此我把配置改成了:

1
2
3
4
5
6
<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生效。

Comments