如何防止log4j日志被重定向到root logger

时间:2013-09-26 06:55:05

标签: java logging log4j

我只定义了两个记录器:一个是根记录器,另一个是普通记录器。 我认为那时普通记录器会成为root logger的直接子项吗?  如果是,那么如何防止普通记录器的appender打印的日志冒泡到root logger的appender?

根据文件:

  

但是,如果记录器C的祖先说P,则设置加性标志   为了假,那么C的输出将被定向到C中的所有appender   和它的祖先,包括P,但不包括任何的appenders   P的祖先。

表示将其可加性设置为false的记录器将其所有日志都冒泡到 它的父母但不高于它。我是对的吗?

如果是,那么设置我的通用记录器的可加性标志将无济于事(实际上它没有:))并且日志仍然打印到普通记录器和根记录器。如何防止这种情况?

2 个答案:

答案 0 :(得分:4)

#root logger config starts
log4j.rootLogger=INFO, RA
log4j.appender.RA=org.apache.log4j.RollingFileAppender
log4j.appender.RA.File=/Data/var/logs/root.log
log4j.appender.RA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.RA.MaxBackupIndex=1
log4j.appender.RA.layout=org.apache.log4j.PatternLayout
log4j.appender.RA.layout.ConversionPattern=%p %d - %m%n
# root config logger ends

#ico common logger config starts
log4j.logger.com=INFO, COMMONA
log4j.appender.COMMONA=org.apache.log4j.RollingFileAppender
log4j.additivity.com=false
log4j.appender.COMMONA.File=/Data/var/logs/common_ico.log
log4j.appender.COMMONA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.COMMONA.MaxBackupIndex=1
log4j.appender.COMMONA.layout=org.apache.log4j.PatternLayout
log4j.appender.COMMONA.layout.ConversionPattern=[%x]%p %d - %m%n
#ico common logger config ends

以上配置有效。我使用log4j.additivity.COMMONA=false代替log4j.additivity.com=false

答案 1 :(得分:2)

使用此配置

<appender name="a2" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="common %m%n" />
    </layout>
</appender>
<appender name="a1" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="root %m%n" />
    </layout>
</appender>
<logger name="common" additivity="false">
    <appender-ref ref="a2" />
</logger>
<root>
    <priority value="debug" />
    <appender-ref ref="a1" />
</root>

Logger.getLogger("common").debug("1111");

打印

common 1111