2009-05-12 21 views
0

Log4netは、正しく設定できない場合にのみコンソールにメッセージを出力します(http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html#reliable)。Log4netが正しく設定されていない場合の例外

Loggingは私のアプリケーションの重要な部分ですので、Log4netが正しく設定されているかどうかを知りたいです。私はLog4netから情報を得る方法を見つけることができなかったので、私はこのコードを書いた。しかし、私はその戦略がまったく嫌いです。 より良い提案はありますか?

 TextWriter errorConsole = new StringWriter(); 
     TextWriter defaultErrorConsole = Console.Error; 
     Console.SetError(errorConsole); 
     try 
     { 
      //configure Log4net 

      string errorMessage = errorConsole.ToString(); 
      bool initializationError = errorMessage.IndexOf("log4net", StringComparison.OrdinalIgnoreCase) == -1; 
      if (initializationError) 
      { 
       throw ... 
      } 
     } 
     finally 
     { 
      Console.SetError(defaultErrorConsole); 
     } 

また、ILog.Errorの呼び出しなど、メッセージを記録するとき。ログに記録されているかどうかを確認する方法はありますか?

答えて

1

構成中に発生したエラーは、log4netに内部でthe log4net.Util.LogLog classを使用して記録されます。残念ながら、現在のリリースでは、このクラスはあまりあなたを助けることはできません。一方、the current sourceでは、内部ログメッセージが受信されるたびに起動するLogReceivedイベントにサブスクライブすることができます。

ロガーリポジトリは、内部メッセージの最新のリストを公開するILoggerRepository.ConfigurationMessages()メソッドでも拡張されています。

メッセージがログに記録されているかどうかの監視に関しては、少なくともAppenderSkeletonクラスで構築されたアペンダーは、構成中に使用されたのと同じ内部エラーメッセージングを使用します。したがって、最新のソースでは、LogReceivedイベントを介してそのような通知を受け取ります。

+0

ご回答ありがとうございます。あなたは新しいリリースがいつ作られるのか知っていますか? – Karsten

+0

それは良い質問ですが、私も答えはありません:)それは長い未解決のリリースです。 log4netは現在開発中ですので、いつか新しいリリースが見られるはずです... –

関連する問題