8

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

我在 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 并不总是可以访问 sessionstate,尤其是。如果在加载会话之前发生异常,我将我想要报告的数据复制到 HttpApplication 缓存中(由 sessionid 索引)。
  4. 当发生异常时,我通过存储在请求中的 sessionid(特别是在 cookie 中)从应用程序缓存中获取我想要的数据。我从这些数据中生成一个 NameValueCollection,并通过 OnBuilding 参数将其发送回 httpmodule。
  5. 然后将数据呈现到电子邮件,类似于呈现服务器变量部分的方式。
于 2010-03-28T18:44:25.107 回答