2009-04-15 3 views
4

지정한 문자열을 포함하는 메시지를 걸러 내고 싶습니다. 나는 log4net.Filter.StringMatchFilter을 사용했으나 이것은 appenders에만 적용됩니다.log4net의 로거 수준에서 필터링 할 수 있습니까

Logger 수준에서 이미 해당 메시지를 필터링하고 싶습니다. 다음 줄에있는 항목 :

<logger name="MyLogger.WebServices"> 
    <level value="Debug" /> 
    <filter type="log4net.Filter.StringMatchFilter"> 
     <stringToMatch value="do not log me" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
    <appender-ref ref="file" /> 
    <appender-ref ref="debug" /> 
</logger> 

실제로이 방법이 가능합니까? 또는이 상황을 처리 할 다른 방법이 있습니다.

답변

11

필터는 어 펜더에만 사용됩니다. 여러 애펜더에 대한 이벤트를 필터링해야하는 경우 forwardingappender를 사용하여 사전 필터링 할 수 있습니다. 이렇게하면 여러 필터에 동일한 필터를 복사하여 붙여 넣지 않아도됩니다.

귀하의 예는 다음과 같습니다

<appender name="screeningAppender" type="log4net.Appenders.ForwardingAppender"> 
    <filter type="log4net.Filter.StringMatchFilter"> 
      <stringToMatch value="do not log me" /> 
      <acceptOnMatch value="false" /> 
    </filter> 

    <appender-ref ref="file" /> 
    <appender-ref ref="debug" /> 
</appender> 

<logger name="MyLogger.WebServices"> 
    <level value="Debug" /> 
    <appender-ref ref="screeningAppender" /> 
</logger> 
+0

을 나는 두려워 무엇을 그. 건배! – Rashack

+0

저는 환경 인식 (예 : dev 또는 production) 중 하나에서 사용자 정의 appender를 만들거나 생각한다고 생각했지만,이 기능을 모든 appender에게 "give"필터로 옮기는 아이디어를 좋아합니다. – Kit

+0

불행히도 그것은 나를 위해 작동하지 않았다. LevelToMatch 필터를 사용하고 있는데 전달하지 않았습니다. 필터가 acceptOnMatch = true이고 다음에 denyAll이 있기 때문일 수 있습니다. – Alex

관련 문제