2008-08-15 17 views
25

私は、ASP.NETアプリケーションでエラーを記録する最善の方法を探しています。 私のアプリケーションでエラーが発生したときに、例外と現在のリクエストに関する詳細情報を電子メールで受け取ることができます。ASP.NETアプリケーションでエラー(例外)をどのように記録しますか?

私の会社では独自のErrorMailerを使用して、Global.asax Application_Errorのすべてをキャッチしていました。それは「OK」でしたが、あまり柔軟ではなく、設定もできませんでした。

私は最近NLogに切り替えました。これはずっと設定が可能で、エラーのさまざまなターゲットを定義し、フィルタリングし、バッファリングします(まだ試していません)。それは非常に良い改善です。

最近、この目的のために.Netフレームワークに完全な名前空間があることが発見されました。System.Web.Managementとweb.configのhealthMonitoringセクションで設定できます。

あなたは.Netヘルスモニタリングに携わったことがありますか?エラー・ロギングのソリューションは何ですか?

+0

私はSystem.Web.Managementも見たことがありますが、私は一度も使用していません。私はそれがうまくいくかどうかのフィードバックを聞いてみたい。 –

答えて

27

私はelmahを使用します。それはいくつかの本当に素晴らしい機能を持っており、ここにはCodeProjectという記事があります。私はStackOverflowチームもelmahを使用すると思います!

+4

私は昨年、[ELMAHチュートリアル](http://blog.elmah.io/elmah-tutorial/)を書きましたが、このシナリオについてはCodeProjectの記事よりも詳しく説明していると思います。 – ThomasArdal

0

私たちが書いた自家製のログユーティリティを使用します。必要な場所で自分でログを実装する必要があります。しかし、それはまた、あなただけの例外よりも多くをキャプチャすることができます。

例えば我々のコードは次のようになります。

Try 
    Dim p as New Person() 
    p.Name = "Joe" 
    p.Age = 30 
Catch ex as Exception 
    Log.LogException(ex,"Err creating person and assigning name/age") 
    Throw ex 
End Try 

たちのロガーは、我々はSQLデータベースに必要なすべての情報を書き込みますこの方法です。特定のエラーや頻繁に発生するエラーを探すために、DBレベルで電子メールアラートを設定しています。エラーの原因を正確に特定するのに役立ちます。

これはあなたが探しているものとは異なる場合があります。 Global.asaxを使用するのと同様のもう1つのアプローチは、AOPPostSharpのコードインジェクション技術です。これにより、すべてのメソッドの開始時と終了時、またはすべての例外時にカスタムコードを挿入できます。興味深いアプローチですが、パフォーマンス上のオーバーヘッドが大きいと思われます。

0

私のチームはApacheのlog4netを使用しています。かなり軽量でセットアップも簡単です。何よりも、web.configファイルから完全に設定できるので、コード設定でフックを取得したら、web.configファイルを変更するだけでロギングの方法を完全に変更できます。

log4netは、データベース、電子メール、テキストファイル、Windowsイベントログなど、さまざまな場所へのロギングをサポートしています。私のチームは詳細なエラー情報をデータベースに送信し、チーム全体コードのどの部分にエラーが発生したのかを判断するのに十分な情報が必要です。その後、誰がそのコードを担当しているのかを知り、より詳細な情報を得るためにデータベースにアクセスできます。

2

私はエンタープライズライブラリのロギングオブジェクトを使用しています。さまざまな種類のログ(フラットファイル、電子メール、データベース)を使用できます。これはかなりカスタマイズ可能で、ロギングの設定用にweb.configを更新するためのかなり良いインターフェースを持っています。通常、私はGlobal.asaxのOn Errorから自分のログを呼び出します。

Here's a link to the MSDN

+0

私は約1年前にプロジェクト用にMSエンタープライズライブラリのロギングを使用することを余儀なくされました。それは非常に複雑で、正確な詳細は覚えていませんが、ロギングソリューションで期待される最小限の機能が不足していました。 Visual Studioのアドインは、web.configを正しく設定する唯一の方法です。そのツールはあなたのweb.configを再フォーマットし、そこからすべてのコメントを削除します:( – TechSavvySam

9

私は致命的なエラーの詳細を電子メールで送信するように、Log4netを使用してきました。また、すべてをログファイルに記録するように設定されています。これは、問題をデバッグする際に非常に貴重です。もう一つの利点は、標準機能があなたが望むことをしない場合、必要に応じてロギング情報を処理できるカスタムアペンダーを書くことはかなり簡単だということです。

私はこれを、標準のlog4net電子メール(ページ、セッション変数、クッキー、httpサーバ変数に含まれているものよりも少し詳しい情報を含むhtml電子メールを送信するカスタムエラーハンドラと一緒に使用しています)

これらは両方ともApplication_OnErrorイベントに組み込まれています。例外はlog4netに致命的な例外として記録され(指定された電子メールアドレスに電子メールで送信されます)、カスタムエラーを使用して処理されますハンドラ。

最初にElmahをCoding HorrorブログのエントリCrash Responsiblyから聞いてみましたが、私はまだそれをどのプロジェクトにも実装していません。

+0

+1それは自分自身を良く言っていませんでした! –

0

私は最近、すべてのデスクトップアプリケーションに使用するNLogでasp.net Webサービスを構築しました。私はVisual Studioでデバッグしているときにログを正常に動作しますが、IISに切り替えるとログファイルは作成されません。私はまだ理由を特定していませんが、ソリューションを探す必要があるという事実は、私のasp.netのニーズに何か他のことを試してみたいということです。

2

私はlog4netを使用しています。どこでも私はと期待しています。例外は適切なレベルにログします。私は例外を再スローしない傾向があります。なぜなら、これは本当に良いユーザーエクスペリエンスを可能にするものではないため、現在の状態では提供できる情報が少ないからです。

Application_Errorは、予期しない例外をキャッチするようにも設定します。エラーはlog4netを介して致命的優先度として記録されます(404は、重大度が高いほど情報として検出され、記録されます)。

0

EnterpriseLibrary.ExceptionHandling.Loggingを使用します。私はログを完全に制御するだけでなく、設定内でThrow/NoThrowの決定を制御できるので、log4netよりも少し良いです。

関連する問題