質問

ASP.NET アプリケーションのエラーをログに記録する最良の方法を探しています。アプリケーションでエラーが発生したときに、例外と現在のリクエストに関する詳細情報を含む電子メールを受信できるようにしたいと考えています。

私の会社では、Global.asax Application_Error 内のすべてをキャッチする独自の ErrorMailer を使用していました。それは「OK」でしたが、あまり柔軟でも構成可能でもありませんでした。

最近 NLog に切り替えました。はるかに構成可能で、エラーのさまざまなターゲットを定義したり、フィルタリングしたり、バッファリングしたりできます (まだ試していません)。とても良い改善ですね。

しかし、私は最近、.Net フレームワークにこの目的のための名前空間全体があることを発見しました。 システム.Web.管理 で設定できます 健康監視 web.config のセクション。

.Net ヘルスモニタリングを使用したことがありますか?エラーログの解決策は何ですか?

役に立ちましたか?

解決

私が使う エルマ. 。本当に素晴らしい機能がいくつかあります。 コードプロジェクト それに関する記事。StackOverflow チームも elmah を使用していると思います。

他のヒント

私は使ってきました ログフォーネット, 、致命的なエラーの詳細を電子メールで送信するように構成されています。また、すべてをログ ファイルに記録するように設定されているため、問題をデバッグするときに非常に役立ちます。もう 1 つの利点は、その標準機能が希望どおりに動作しない場合に、必要に応じてログ情報を処理できるカスタム アペンダーを作成するのが非常に簡単であることです。

そうは言っても、私はこれをカスタム エラー ハンドラーと組み合わせて使用​​しており、標準の log4net メールに含まれる情報よりももう少し詳しい情報 (ページ、セッション変数、Cookie、http サーバー変数など) を含む HTML メールを送信します。

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

初めて聞いた話 エルマ コーディングホラーのブログエントリーより、 責任を持って衝突する, 、そしてそれは有望に見えますが、私はまだそれをどのプロジェクトにも実装していません。

私は Enterprise Library の Logging オブジェクトを使用しています。これにより、さまざまなタイプのロギング (フラット ファイル、電子メール、データベース) が可能になります。かなりカスタマイズ可能で、ロギングの設定のために web.config を更新するための非常に優れたインターフェイスを備えています。通常、私は Global.asax の On Error からログを呼び出します。

ここに MSDN へのリンクがあります

私はどこでも log4net を使用しています 期待する 例外を適切なレベルに記録します。私は、例外を再スローしない傾向があります。これは、実際には優れたユーザー エクスペリエンスを実現できず、現在の状態では提供できる情報が少ないためです。

また、予期しない例外をキャッチするように Application_Error を構成し、エラーは log4net を通じて致命的な優先度として記録されます (まあ、404 は検出され、重大度がそれほど高くないため、情報として記録されます)。

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

log4net は、データベース、電子メール、テキスト ファイル、Windows イベント ログなど、さまざまな場所へのログ記録をサポートしています。私のチームは、詳細なエラー情報をデータベースに送信し、コードのどの部分でエラーが発生したかを判断するのに十分な情報を含む電子メールをチーム全体に送信するように構成しています。そうすれば、そのコード部分の責任者が誰であるかがわかり、データベースにアクセスしてより詳細な情報を取得できるようになります。

最近、NLog を使用して asp.net Web サービスを構築し、すべてのデスクトップ アプリで使用しています。Visual Studio でデバッグしているときはログ記録は正常に機能しますが、IIS に切り替えるとすぐにログ ファイルが作成されません。理由はまだわかりませんが、解決策を探す必要があるという事実を考えると、asp.net のニーズに合わせて別のことを試してみたくなりました。

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

私たちが作成したカスタムの自家製ロギング ユーティリティを使用します。必要な場合はどこでもログを独自に実装する必要があります。ただし、例外だけでなく、さらに多くのことをキャプチャすることもできます。

たとえば、コードは次のようになります。

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 つのアプローチは、次のようなコード インジェクション手法を使用することです。 AOPポストシャープ. 。これにより、すべてのメソッドの最初と最後、またはすべての例外にカスタム コードを挿入できます。これは興味深いアプローチですが、パフォーマンスに大きなオーバーヘッドがかかる可能性があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top