2009-04-15 15 views
4

指定した文字列を含むメッセージを除外します。 log4net.Filter.StringMatchFilterを使用しましたが、これはアペンダーだけに適用されます。log4netのLoggerレベルでフィルタリングすることができます

私はすでに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

フィルタはアペンダーでのみ使用できます。いくつかのアペンダーのイベントをフィルターに掛ける必要がある場合は、転送フィルターを使用して事前フィルターすることができます。この方法で、複数のアペンダーに同じフィルターをコピーして貼り付ける必要がなくなります。

あなたの例では、次のようになります。

<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など)から作ったと思っていましたが、これをフィルターに移して、すべてのアペンダーにその能力を "与える"気がします。 – Kit

+0

残念ながら、それは私のために働かなかった。 LevelToMatchフィルタを使用していて、転送しませんでした。たぶんそれはフィルタがacceptOnMatch = trueであり、denyAllの後に... ...わからないからです。 – Alex

関連する問題