3

我只定义了两个记录器:一个是根记录器,另一个是普通记录器。我认为普通记录器成为根记录器的直接子级,对吗?如果是,那么如何防止普通记录器的附加程序打印的日志冒泡到根记录器的附加程序?

根据文档:

但是,如果记录器 C 的祖先说 P,将可加性标志设置为 false,则 C 的输出将定向到 C 中的所有 appender 及其祖先(包括 P),但不会定向到 P 的任何祖先中的 appender。

意味着可加性设置为 false 的记录器将使其所有日志冒泡到其父级,但不会高于此。我对么?

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

4

2 回答 2

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

于 2013-09-26T09:38:00.893 回答
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
于 2013-09-26T07:42:29.070 回答