2009-04-01 19 views
3
  1. エラーログコードが失敗した場合はどうすればよいですか?
  2. どのように現在動作していることを確認しますか?
  3. 動作していないことをどうやって知っていますか?
  4. 実稼働環境での動作をどのようにテストしますか?
  5. その他すべてが失敗した場合は例外をスローする必要がありますか?

以下のコードは、MicrosoftのEnterprise Library Logging Application Blockを使用しています。どのように「より良い」ものにしていますか?エラーロギングが失敗した場合はどうすればよいのですか?

using Microsoft.Practices.EnterpriseLibrary.Logging; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      // Trying to write some data to the DB 
      ... 
     } 
     catch (Exception ex) 
     { 
      LogHelper.LogException(ex, "Trying to write to the DB"); 
     } 
    } 
} 

public class LogHelper 
{ 
    public static void LogException(Exception ex, string exceptionType) 
    { 
     try 
     { 
      // Simplified version, only logging the message 
      Logger.Write(exceptionType); 
     } 
     catch 
     { 
      // What do you do here??? 
     } 
    } 
} 
+0

をチェックアウト[この質問](http://stackoverflow.com/questions/585539/what-is-the-best-exception-handling-strategy-within-error-logging-classes) – darasd

答えて

2

は私のrelated questionでの回答を参照してください。これが失敗する可能性が低い場所のテキストファイルに例外を記録します。この最後の手段のロギングが別の例外をスローすることによって失敗した場合、その例外を飲み込むか、アプリケーションを終了してエラーをメッセージボックスとして表示できます。

この特別な(例外的な)ケースでは、例外を飲み込むことがアプリを終了させない唯一の方法です。

+0

また、最後の手段としてのイベントログも同様です。 – Joe

+0

いいえ、それはより簡単に失敗する可能性があります。デフォルトでは、イベントログは7日以上経過したevntを上書きするようにのみ設定されています。それらがいっぱいであれば、それらに書き込む試みは例外をスローする... – Treb

4

私のアプリは通常、エラーで2つのことを行います。 1つ目は、それをローカルログファイルに書き込むことです(たとえそれが何らかのタイプのデータベースログを使用しているとしても)。次に、エラーの電子メールをサポート用に設定された配布リストに送信します。

したがって、データベースログの書き込みに失敗すると、エラーはローカルログファイルに記録され、電子メールでも送信されます。

電子メールに障害が発生すると、エラーはログに記録され、後で問題をトラブルシューティングできます。

これ以上の耐故障性を得ることは、非常に重要なアプリケーションのための努力の価値があるだけです。他のすべてが失敗した場合、

あなたのcatchブロックで「最後のロギング」を持っている:

0

私はログファイルを書いているだけでなく、決して遠ざけることのない共通のアドレスに電子メールを送ります。どちらも弾丸ではありませんが、私たちのメールシステムがダウンしている場合、またはメールサーバーが変更された場合、私たちはそれについて知っていると思います。私は、データベースとフラットファイルの両方に書き込み、電子メールを送信するいくつかのアプリを持っています。だから3人のうちの1人が働くだろう。私のアプリケーションの1つがログ用のデータベースに書き込んでいて、同じデータベースに書き込んでいたキャッチで、db接続のいくつかの変更のためにアプリケーションが失敗していることがわかった唯一の方法でした。私はそのcatchステートメントをdbの代わりに電子メールで修正するようにしました。私がフラットファイルで持つ唯一の問題は、ファイルシステムのストレージです。フラットファイルをログに書き込むアプリケーションがたくさんあるので、それらを常にバックアップして保存するか、単純に削除します。

関連する問題