明らかではない理由で Log4Net がサイレントにシャットダウンするようで、トラブルシューティングの方法がわかりません。私の推測では、特定のアペンダーが特定のログ メッセージで失敗し、スタック全体がシャットダウンしているように見えます。
サービスを静かにシャットダウンするのではなく、Log4Net に (少なくともデバッグ フェーズ中に) 例外をスローさせる方法はありますか?
明らかではない理由で Log4Net がサイレントにシャットダウンするようで、トラブルシューティングの方法がわかりません。私の推測では、特定のアペンダーが特定のログ メッセージで失敗し、スタック全体がシャットダウンしているように見えます。
サービスを静かにシャットダウンするのではなく、Log4Net に (少なくともデバッグ フェーズ中に) 例外をスローさせる方法はありますか?
前の回答を拡張する -
log4net.Internal.Debug トレースのトレース リスナーを追加するには、これをアプリ構成に追加します。
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\temp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
上記の initializeData 属性値を目的のログ ファイル パスに置き換えます。アプリケーションまたは ASP.NET サーバー プロセスに、このファイルへの書き込み権限があることを確認してください。
他にできることは、起動時に log4net 構成から返されるメッセージを調べることです。log4net バージョン 1.2.11 以降、XmlConfigurator.Configure() メソッドは、構成プロセス中に発生した問題をリストする文字列を含む ICollection を返します。
したがって、次のようなものがある場合:
XmlConfigurator.Configure();
に変更します
ICollection configMessages = XmlConfigurator.Configure();
デバッガーでconfigMessagesを検査するか、どこかに出力します。
foreach (string msg in configMessages)
{
Console.WriteLine(msg);
}
他のすべてが失敗した場合は、log4net ソースをダウンロードし、プロジェクトをソリューションに追加して、log4net.dll の代わりにプロジェクトを参照してください。これで、デバッガーで log4net 呼び出しにステップインできます。
app.config / web.configのappSettingsセクションに配置して、log4netの内部デバッグステートメントをオンにできる構成値があると思います。
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
これにより、log4netが飲み込んでいる可能性のあるエラーについての洞察が得られます。