2013-02-22 3 views
7

aspx.csの未処理のエラーコードは、global.asaxのApplication_Errorハンドラによって捕捉されます。
私は、このような未処理のエラーがaspx.cs
で起こった。しかしのコードは、ログ自体た場合にも失敗し、例外を生成したログに記録するのApplication_Errorハンドラでいくつかのコードを記述しています。
(多分によるI/Oまたはファイルシステムの問題に)私はそのような例外を捨てるべきですか?
私はそれを投げ捨てると、そのような例外を受け取るべきイベントはありますか?
"throw"構文を書くかどうかは違いはありませんか?
Global.asaxのApplication_Errorハンドラで発生する例外をスローする必要がありますか?

protected void Application_Error(object sender, EventArgs e) 
{ 
    try 
    { 
     // my codes to log exception to Database System here.... 
    } 
    catch(Exception) 
    { 
     throw; //Should I write "throw" syntax here ? 
    } 
} 

答えて

5

Application_Errorはスレッド(現時点であなたの要求を処理している)が中止される前に発生した例外をログに記録できる最後の場所です。

例外をスローする必要はありません。機能が終了すると自動的にスローされるためです。

これは妥当なimplementationです。

あなたの最大の懸念は、フェイルオーバーメカニズムが失敗した場合の対処であると思います。この場合、あなたのロギングです。これはコンピュータの大きな問題ですが、チェーンフェールオーバーメカニズムの構築は、最終的にすべてになる可能性があるため、通常は時間の無駄です。が失敗する可能性があります。最善の方法は、時間の99.9%を成功させる最後の手段として、非常に信頼できるロギングメカニズムを持たせることです。そのような仕組みを作り出す方法に踏み込むことはありません(あなた自身で行うことは良い考えではありません - とにかく自分のログを作成するには、ログを十分に、そして目立たないようにするための多くのトリックがあるので)全体的に私はelmahを使用することをお勧めします。これはおそらく現在入手可能な最良のログフレームワークです&あなたの目的を果たすでしょう。

(実際の状況ではそうでない可能性がある)非常に少量のエラーについては、私はそれらを眠らすことはありません。

0
  • を次のように
    コードサンプルを使用すると、ログインした後、Server.GetLastException()をスローするようにしたいですか?その例外の性質と原因によって異なります。特別なプレースホルダやポップアップで表示したい
  • 例外をスローした場合、その例外を記録しようとしましたか?それで、間違いなくあなたはそれを飲みたいかもしれません。
関連する問題