1

データの変換と同期のために終日実行されるユーティリティがあります。

アプリが一時的に実行を停止しても大したことではありませんが、そのアクションをログに記録する必要があります。ログに記録しないよりも、アプリが失敗することを望みます。この件に触れているいくつかの投稿に出くわしましたが、解決策がどれも機能しません。

アプリケーションの実行を停止する方法を設定し (アプリの設定によって異なります)、Log4Net がログを停止した場合に警告メールを送信する必要があります。

私は私のアペンダーのためにこれを持っています:

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <errorHandler type="SomeApp.PresentationLayer.Log4NetErrorHandler" />
  <file type="log4net.Util.PatternString" value="H:\SomeApp-%property{RegNo}-log.txt" />
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START]" />
    <footer value="[END]" />
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
  <level value="DEBUG" />
  <appender-ref ref="LogFileAppender" />
  <!-- <appender-ref ref="A" /> -->
</root>

そして、ここに私のエラーハンドラがあります:

namespace SomeApp.PresentationLayer
{
class Log4NetErrorHandler : IErrorHandler
{

    public bool HandleError(Exception ex)
    {
        //Trace.TraceError(ex.ToString());
        ExceptionUtil.GetAndLogMessage(ex, "Log4Net Error in SomeApp", false, true);

        return false;
    }

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {
        // Shield the unknown exception
        FaultException faultException = new FaultException(
            "Server error encountered. All details have been logged.");
        MessageFault messageFault = faultException.CreateMessageFault();

        fault = Message.CreateMessage(version, messageFault, faultException.Action);
    }
}
}

何を試しても、例外ハンドラーは起動しません。ログ ファイルをマップされたドライブに設定しています。ロギング中にドライブを切断すると、例外ハンドラーに例外がスローされることはありません。私が見逃しているものを見た人はいますか?

私はc#.net 3.5 log4net 1.2.10を使用しています

事前に助けてくれてありがとう。

4

2 に答える 2

0

私は実際にはlog4neterrorHandlerを使用しておらず、ここでは完全にオフになっている可能性がありますが、私の直感では、errorHandlerはアプリケーションの例外ではなくlog4netの例外の処理を構成するためのものであり、この主題について利用できる情報が非常に少ないため、偽物であることがわかります。 errorHandlerパラメーターに関するブログ投稿はおそらくあなたを混乱させました。SDKドキュメントから:

Implements log4net's default error handling policy which consists of emitting a 
message for the first error in an appender and ignoring all subsequent errors. 

あまり役に立たなかったと私は認めますが、それはあなたが思っていることをしていないようです。アプリケーションでアプリケーションの例外を適切に処理し、メッセージを自分でログに記録して、ログに表示する必要があります。

そして、追加の手がかりを提供するかもしれない別の質問がここにあります。

于 2012-06-21T02:31:59.747 に答える
0

見つけた。

Log4Net の iErrorHandler です。

http://dotnetforyou.wordpress.com/2011/02/18/debugging-log4net-when-it-stops-logging/

于 2012-08-03T05:42:40.530 に答える