log4net:特定のクラスからのメッセージを無視するように構成する

はい、フィルタを使用してください。

以下は、今後の参考のためにブログに投稿されたスニペットです。

<filter type="log4net.Filter.LoggerMatchFilter">
  <!-- allows this sub-namespace to be logged... -->
  <loggerToMatch value="Noisy.Namespace.But.Important" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
  <!-- ...but not the rest of it -->
  <loggerToMatch value="Noisy.Namespace" />
  <acceptOnMatch value="false" />
</filter>

フィルターは確かに機能しますが、次のようにロガー (またはロガー階層) を直接オフにすることをお勧めします:

<logger name="YourNameSpace.WithNoLogging" additivity="false">
    <level value="OFF" />        
</logger>
<logger name="MyClass" additivity="false">
    <level value="OFF" />        
</logger>
<root>
    <level value="ALL" />
    <appender-ref ref="YourAppender" />
</root>

YourNameSpace.WithNoLogging と仮定すると が名前空間の場合、示されている構成では、名前空間全体でのログ記録が無効になります。 2 番目の「例」では、クラスのロギングをオフにします (質問による)。


フィルターも使用することをお勧めします。ただし、フィルターを実装しようとしたときに全体像を見つけるのに苦労したため、Configutation file のサンプル スニペットを投稿しています。 フィルターがどこに行くのかを指摘するものを作成しました。

この場合のフィルターは

ヒント: configLog4Net のファイル タグをどこに置くかが重要であり、それらの優先度が実際に重要です。この場合 <filter> タグは <appender> の後に来ます 開始タグと <file value = ... /> の前 タグ。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <appender name="RollingFile.PassedDevices" type="log4net.Appender.RollingFileAppender">
            <filter type="log4net.Filter.LoggerMatchFilter">
                <loggerToMatch value="Foo.namespace.bar.mySubclass" />
                <acceptOnMatch value="false" />
            </filter>
            <file value="myPassedDevices.log" />
            <appendToFile value="true" />
            <maximumFileSize value="100KB" />
            <maxSizeRollBackups value="2" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%timestamp    %level  - %message  [%thread]       %logger%newline" />
            </layout>
        </appender>
        <root>
            <level value="DEBUG" />
            <appender-ref ref="RollingFile" /> <!-- My other appender which logs all and I cut it out in this snippet. Remember that you should reference all your appenders in this tag to make them work.-->
            <appender-ref ref="RollingFile.PassedDevices" />
        </root>
    </log4net>
</configuration>

このテクニックでは、複数の appenders を持つことができます 特定のロガーのロギング結果を別の appender にリダイレクトできます それらを無視する代わりに。 1 つの appender など すべてのログ用と、特定の class のフィルターで除外されたログ用の 1 つ .