4
我正在使用log4j进行记录。我有一个场景,我必须针对不同的严重性使用单独的日志记录。例如,对于包foo,我必须在控制台中打印严重性为ERROR的消息,而我必须在日志文件中打印严重性为WARN的消息。我怎样才能配置我的log4j.xml相同。级别的特定记录器
我正在使用log4j进行记录。我有一个场景,我必须针对不同的严重性使用单独的日志记录。例如,对于包foo,我必须在控制台中打印严重性为ERROR的消息,而我必须在日志文件中打印严重性为WARN的消息。我怎样才能配置我的log4j.xml相同。级别的特定记录器
您可以为您的任务使用LevelMatchFilter。此外,您不应该忘记使用另一个过滤器 - DenyAllFilter - 作为过滤器链中的最后一个过滤器。
你的log4j.xml看起来就像这样:
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout" />
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="error.log" />
<layout class="org.apache.log4j.SimpleLayout" />
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="WARN" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<logger name="foo">
<level value="WARN" />
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</logger>
</log4j:configuration>
为什么我们应该用'DenyAllFilter'? – Tariq
@Tariq简而言之:因为如果事件级别与参数LevelToMatch的值不匹配,LevelMatchFilter将保持中性。因此,要拒绝LevelMatchFilter不接受的所有事件(在我们的示例中,因为AcceptOnMatch = true),我们需要DenyAllFilter。 –