2009-08-06 42 views
3

Log4netはエラーをスローしないとあまり良くありません。私は、log4netが起動できないか死んでもログできなくなった場合に起動するハンドラを作成しようとしています。log4netがロギングを停止した場合のイベントの受信方法

log4netの内部デバッグ(log4net.Internal.Debug)を有効にするためのアプリ設定キーがあります。私はlog4netに問題がある場合でも、すべてのデバッグ情報を必要としません。

log4netでプログラムでキャプチャしてエラーを処理した人はいますか?

答えて

0

Log4netは、ロギング操作中にスローされる例外を(意図的に)抑制するので、これを行うのが非常に難しくなります。これは、ログメッセージのフォーマット中にエラーが発生しても運用システムが失敗しないためです。

非常に単純なパターンレイアウトで試してみる価値があります。パターンレイアウトで%P {XYZ}要素を使用すると、対応するプロパティが正しく設定されていないと問題が発生することがあります。シンプルなパターンレイアウトですべてが期待どおりに機能する場合は、必要なものを一度に1つずつ追加して、そのように問題を特定できるかどうかを確認できます。

+2

これは正しいと思われます。私たちが必要としている数回のうちに、私たちはlog4net.Internal.Debugを有効にしています。 –

4

あなたのためには、アペンダーごとにIErrorHandlerを実装するクラスを作成し、各アペンダーがカスタムエラー処理クラスを使用するように設定することが必要です。これにより、log4net.Internal.Debugを有効にするよりも多くの制御が可能になります。

私はこれを試してみました。私のサンプルでは、​​Loggerは他の場所で定義されているlog4netロガーです - これはSMTPアペンダーからエラーを取得してファイルに記録することです):

私は私のアペンダ(もちろんあなたも設定でこれを行うことができます)を設定
using System; 

using log4net.Core; 

namespace Test 
{ 
    public class SmtpErrorHandler : IErrorHandler 
    { 
     public void Error(string message) 
     { 
      Logger.Log.Error(message); 
     } 

     public void Error(string message, Exception ex) 
     { 
      Logger.Log.Error(message, ex); 
     } 

     public void Error(string message, Exception ex, ErrorCode errorCode) 
     { 
      Logger.Log.Error(String.Format("{0}{1}Error code: {2}", message, Environment.NewLine, errorCode), ex); 
     } 
    } 
} 

emailAppender.ErrorHandler = new SmtpErrorHandler(); 
0

を私たちは... Logger.Log.Errorを行い、当社独自のカスタムクラスを作成している場合例外がスローされたり、何かが間違っていたりすると、元のエラーとWindowsイベントログへの例外。

エラーを分析するとき、ユーザーはログファイルだけでなくイベントログも送信する必要があります。イベントログを自動的にエクスポートし、すべての利用可能なLog4netログファイルと共にzipファイルに圧縮するツールを作成しました。

0

SCOM(System Center Operations Manager)などの監視ツールを使用すると、ログファイルを監視し、n時間/日を超えて変更が加えられていないときに警告するように設定できます。

関連する問題