自定义Elmah YSOD数据

时间:2010-03-02 17:20:36

标签: asp.net exception elmah unhandled

我正在使用Elmah和ASP.NET,并想知道如何将自定义数据(例如会话变量)添加到未处理的异常电子邮件中。

我在Global.asax文件中尝试了几个处理程序,但似乎找不到合适的处理程序。

2 个答案:

答案 0 :(得分:4)

为此,我认为您需要修改Elmah source并重新编译。实现起来应该不难。如果您查看Elmah.Error类的构造函数,则会传入HttpContext,您应该可以从中获取所需的信息,例如会话,表单变量等。您可以为此数据的Elmah.Error类添加自定义字段

我认为Elmah.ErrorMailHtmlFormatter类是使用HtmlTextWriter构建电子邮件的地方,在这里您可以在RenderSummary()方法中插入代码以包含您添加到{{{ 1}}。

我知道开始使用源代码可能会很痛苦,但我个人认为这是最干净的方式,因为目前没有适用于报表/电子邮件模板的工具,并且最好用螺栓固定某些东西来改变输出后的输出已经生成。

答案 1 :(得分:1)

安德鲁的答案帮了很多忙,谢谢。我最终做了以下事情:

  1. 向ErrorMail http模块添加了OnBuilding事件。此事件的事件参数具有NameValueCollection属性。
  2. 我在global.asax处理了OnBuilding事件。
  3. 由于HttpModules并不总是能够访问sessionstate,尤其是如果在加载会话之前发生异常,我将我想要报告的数据复制到HttpApplication缓存中(由sessionid索引)。
  4. 当发生异常时,我通过请求中存储的sessionid(特别是在cookie中)从应用程序缓存中获取我想要的数据。我从这些数据生成一个NameValueCollection,并通过OnBuilding args将其发送回httpmodule。
  5. 然后将数据呈现为电子邮件,类似于呈现服务器变量部分的方式。