8

ASP.NET で Elmah を使用していますが、未処理の例外メールにセッション変数などのカスタム データを追加する方法を考えています。

Global.asax ファイルでいくつかのハンドラーを試しましたが、適切なハンドラーが見つからないようです。

4

2 に答える 2

4

そのためには、Elmah のソースを変更して再コンパイルする必要があると思います。達成するのはそれほど難しくないはずです。Elmah.Errorクラスのコンストラクターを見ると、HttpContextが渡され、そこから必要な情報 (セッション、フォーム変数など) を取得できるはずです。Elmah.Errorこのデータのクラスにカスタム フィールドを追加できます。

Elmah.ErrorMailHtmlFormatterクラスは、 を使用して電子メールが作成される場所だと思います。HtmlTextWriterここで、メソッドにコードを挿入して、RenderSummary()に追加したカスタム フィールドを含めることができますElmah.Error

ソースで作業を開始するのは面倒かもしれませんが、個人的には、レポート/電子メール テンプレートの機能がないため、個人的には最もクリーンな方法だと思います。

于 2010-03-09T16:18:10.450 に答える
1

アンドリューの答えはとても役に立ちました、ありがとう。私は最終的に次のことをしました:

  1. ErrorMail http モジュールに OnBuilding イベントを追加しました。このイベントのイベント引数には NameValueCollection プロパティがあります。
  2. global.asax で OnBuilding イベントを処理しました。
  3. HttpModules は常にセッション状態にアクセスできるとは限らないため、特に. セッションがロードされる前に例外が発生した場合は、報告したいデータを HttpApplication キャッシュ (セッション ID でインデックス付け) にコピーしました。
  4. 例外が発生すると、リクエスト (具体的には Cookie) に保存されているセッション ID を介して、アプリケーション キャッシュから必要なデータを取得します。このデータから NameValueCollection を生成し、OnBuilding 引数を介して httpmodule に送り返します。
  5. 次に、サーバー変数セクションがレンダリングされる方法と同様に、データが電子メールにレンダリングされます。
于 2010-03-28T18:44:25.107 に答える