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。 –