Log4net構成で特定のクラスを無視する方法はありますか?たとえば、通常、すべてのクラスでログを作成します。これに似ています:
private static readonly ILog Log = log4net.LogManager.GetLogger("MyClass");
問題は、MyClass
が極端な量のデータを記録し、他のクラスに関する情報を見つけるのが難しくなることです。 MyClass
を使用するもう1つの開発者は、ログファイルに移動して変更することはできませんが、私の環境ではこれらを無視したいと思います。
特定のクラスからのメッセージを無視するようにconfiguration
ファイルを設定できますか?
もちろん、 filter。 を使用してください
ブログに投稿されたスニペットは、今後の参考のためにあります-そのブログ投稿の作者のすべての功績です。
<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番目の「例」は、クラスのロギングをオフにします(質問による)。
Filters も使用することをお勧めします。ただし、フィルターを実装しようとして全体像を見つけるのに苦労したので、フィルターの行き先を示すConfigutation file
のサンプルスニペットを投稿しています。
この場合のフィルターは次のようになります
log4net.Filter.LoggerMatchFilter ----(ロガー名の先頭と一致します。)
HintLog4Netのconfig
ファイルタグを配置する場所とそれらの優先順位は実際に重要です。そのため、この場合、<filter>
タグは、<appender>
openingタグの後、<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つなど。
独自のメッセージにカテゴリを適用してみてください。このスレッドを試してください。 log4netメッセージにカテゴリプレフィックスを追加する方法?