17

明らかではない理由で Log4Net がサイレントにシャットダウンするようで、トラブルシューティングの方法がわかりません。私の推測では、特定のアペンダーが特定のログ メッセージで失敗し、スタック全体がシャットダウンしているように見えます。

サービスを静かにシャットダウンするのではなく、Log4Net に (少なくともデバッグ フェーズ中に) 例外をスローさせる方法はありますか?

4

3 に答える 3

25

前の回答を拡張する -

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 呼び出しにステップインできます。

于 2010-08-26T12:31:11.363 に答える
16

app.config / web.configのappSettingsセクションに配置して、log4netの内部デバッグステートメントをオンにできる構成値があると思います。

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

これにより、log4netが飲み込んでいる可能性のあるエラーについての洞察が得られます。

于 2009-03-24T23:47:03.603 に答える