Java log4j 配置文件不起作用

Java log4j Configuration file doesn't work

我有一个如下所示的log4j配置文件,我想做的是在控制台中输出TRACE并将ERROR消息输出到文件(fileerror)。但是不行,控制台和文件都是TRACE级别的。 </p> <pre><code><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <appender name="fileerror" class="org.apache.log4j.RollingFileAppender"> <param name="append" value="false" /> <param name="maxFileSize" value="1024MB" /> <param name="maxBackupIndex" value="2" /> <param name="file" value="ExonImpact.error.log.txt" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <logger name="ccbb.hrbeu" additivity="true"> <level value="TRACE"/> <appender-ref ref="console" /> </logger> <root> <level value="ERROR"/> <appender-ref ref="fileerror" /> </root> </log4j:configuration>

下面是我的log4j调试信息。 </p> <pre><code>log4j: reset attribute= "false". log4j: Threshold ="null". log4j: Retreiving an instance of org.apache.log4j.Logger. log4j: Setting [ccbb.hrbeu] additivity to [true]. log4j: Level value for ccbb.hrbeu is [TRACE]. log4j: ccbb.hrbeu level set to TRACE log4j: Class name: [org.apache.log4j.ConsoleAppender] log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n]. log4j: Adding appender named [console] to category [ccbb.hrbeu]. log4j: Level value for root is [ERROR]. log4j: root level set to ERROR log4j: Class name: [org.apache.log4j.RollingFileAppender] log4j: Setting property [append] to [false]. log4j: Setting property [maxFileSize] to [1024MB]. log4j: Setting property [maxBackupIndex] to [2]. log4j: Setting property [file] to [ExonImpact.error.log.txt]. log4j: Parsing layout of class: "org.apache.log4j.PatternLayout" log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n]. log4j: setFile called: ExonImpact.error.log.txt, false log4j: setFile ended log4j: Adding appender named [fileerror] to category [root].

默认情况下,子记录器捕获的所有消息都会传播到根记录器。这就是为什么您的两个记录器都记录相同的消息。您可以将 additivity 参数设置为 false (additivity="false") 以防止您的记录器将消息传递给根记录器。或者您可以向文件附加程序添加一个额外的 "threshold" 参数:

<param name="Threshold" value="ERROR" />

然后它将忽略所有错误级别以下的消息。