2012-08-30 41 views
4

我正在使用log4j進行記錄。我有一個場景,我必須針對不同的嚴重性使用單獨的日誌記錄。例如,對於包foo,我必須在控制檯中打印嚴重性爲ERROR的消息,而我必須在日誌文件中打印嚴重性爲WARN的消息。我怎樣才能配置我的log4j.xml相同。級別的特定記錄器

回答

5

您可以爲您的任務使用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> 
+0

爲什麼我們應該用'DenyAllFilter'? – Tariq

+0

@Tariq簡而言之:因爲如果事件級別與參數LevelToMatch的值不匹配,LevelMatchFilter將保持中性。因此,要拒絕LevelMatchFilter不接受的所有事件(在我們的示例中,因爲AcceptOnMatch = true),我們需要DenyAllFilter。 –