2010-03-02 69 views
8

我在ASP.NET中使用Elmah,想知道如何將自定義數據(如會話變量)添加到未處理的異常電子郵件中。自定義Elmah YSOD數據

我試過在Global.asax文件中的幾個處理程序,但似乎無法找到正確的。

回答

4

爲此,我認爲您需要修改Elmah source並重新編譯。應該不難實現。如果您看到Elmah.Error課程的構造函數,則會傳入HttpContext,從中您應該能夠獲得所需的信息,例如,會話,表單變量等等。你可以添加自定義字段到Elmah.Error類此數據

我覺得Elmah.ErrorMailHtmlFormatter類是在電子郵件中使用HtmlTextWriter構造,在這裏你可以在RenderSummary()方法中插入代碼,包括您添加到Elmah.Error的自定義字段。

我知道開始使用源代碼可能很痛苦,但是我個人認爲這是最簡潔的方式,因爲目前沒有報告/電子郵件模板的工具,最好是用螺栓固定某些東西來改變輸出之後的輸出已生成。

1

Andrew的回答非常有幫助,謝謝。我結束了以下工作:

  1. 將一個OnBuilding事件添加到ErrorMail http模塊。此事件的事件參數具有NameValueCollection屬性。
  2. 我在global.asax中處理了OnBuilding事件。
  3. 由於HttpModules並不總是有權訪問sessionstate,如果在會話加載之前發生異常,我將需要報告的數據複製到HttpApplication緩存中(由sessionid索引)。
  4. 當發生異常時,我通過請求中存儲的sessionid(特別是在cookie中)獲取我想要的應用程序緩存中的數據。我從這些數據中生成一個NameValueCollection,並通過OnBuilding參數發送回httpmodule。
  5. 然後將數據呈現給電子郵件,與呈現服務器變量部分的方式類似。