log4net
Log4Netのトラブルシューティング
サーチ…
前書き
Log4netは、フェイルストップロギングシステムです。フェールストップとは、内部例外に対するロギングを停止し、設計上はプログラムフローと対話しないことを意味します。これを知っていると、log4netのトラブルシューティングは簡単ではありません。ロギングに失敗した場合、プログラムは通知しません。あなたは、なぜ私のlog4netのログは機能していないのですか?この資料では、基本的なトラブルシューティングと一般的なソリューションについて説明します。
ほとんどの場合、最初の手順はlog4netの内部デバッグを有効にすることです。
内部デバッグを有効にする
log4netで内部デバッグを有効にする方法は2つあります。
- アプリケーションの設定ファイルにlog4net.Internal.Debugオプションを指定する
- log4netの内部デバッグをプログラムで有効にする
アプリケーションの設定ファイルにlog4net.Internal.Debugオプションを指定する
これは、内部デバッグを有効にするために推奨される方法です。アプリケーションのapp.configファイルにlog4net.Internal.Debugキーを追加します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
デバッグログは、アプリケーションの起動時にすぐに開始されます。
log4netの内部デバッグをプログラムで有効にする
2番目の方法は、プログラムでこれを行うことです。 log4net.Util.LogLog.InternalDebuggingプロパティをtrueに設定します。
log4net.Util.LogLog.InternalDebugging = true;
内部デバッグログ出力
内部デバッグメッセージは、コンソールとSystem.Diagnostics.Traceに書き込まれます。出力をコンソール化する必要がある場合は、System.Console.Outをリダイレクトできます。または、トレース・メッセージをファイルにリダイレクトすることもできます。
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
バッファリングされたアペンダ
log4netアペンダーのいくつかはバッファリングされたアペンダーです。これらのアペンダーは、一定量のメッセージがログに記録されたときにのみログに記録されます。いくつかのサンプルはSmtpAppender、RemotingAppenderまたはAdoNetAppenderです。これらのアペンダーは、BufferSize:
<bufferSize value="100" />
これは、バッファに100個のメッセージがあるときにロガーが記録することを意味します。アペンダーをテストする場合は、bufferSizeを1に設定できます。
エラーでフラッシュするバッファを評価するには、次のようにします。
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
評価者の条件が満たされた場合、バッファはフラッシュされます。
Configure()は呼び出されず、複数回呼び出されます
ロギングが表示されない場合は、アプリケーションでConfigure()が呼び出されているかどうかを確認できます。最も簡単な方法は、それをアトリビュートとしてアセンブリに追加することです。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
そうすれば、設定のどこにでもlog4net.Config.XmlConfigurator.Configure()を追加する必要はありません。または、起動方法の1つにlog4net.Config.XmlConfigurator.Configure()を追加することもできます。設定を1回だけ呼び出すようにしてください。
ファイルアペンダーは書き込みを行いません
ファイルアペンダーがある場合は、ユーザーがファイルを作成および更新できる場所に書き込んでいることを確認してください。そうでない場合、ロギングは失敗します。これは、内部デバッギングを有効にしているときにチェックすることができます。