关于log4j的additivity

一.问题描述

最近优化了一下一个应用的日志,但是优化后的结果不是自己想要的,简单说指定的log部分输出到了root中的appender中,部分输出到自己指定的log中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<appender name="BOORT" class="org.apache.log4j.DailyRollingFileAppender">
	<param name="file" value="xxx/boort.log" />
	<param name="append" value="true" />
	<param name="encoding" value="GBK" />
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />
	</layout>
</appender>
<appender name="OPENAPI" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="xxx/service/api.log"/>
        <param name="append" value="true"/>
        <param name="encoding" value="GBK"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n"/>
        </layout>
</appender>

<logger name="xxxx.Service" additivity="true">
        <level value="info"/>
        <appender-ref ref="OPENAPI"/>
</logger>
<root>
	<level value="info" />
	<appender-ref ref="BOORT" />
	<appender-ref ref="JmonitorAppender" />
</root>

上述xxxx.Service中的日志部分会出现到boort.log,部分会出现到api.log中。但是我们期望xxxx.Service中日志只出现到api.log中。

二.解决方案

上面的问题肯定是日志配置的问题,google后发现additivity=”true”在搞鬼
log4j的配置
具体说明如下:
log4j的additivity