我想知道如何创建用于存储错误日志的自定义提供程序,例如。 Windows事件查看器的提供者。
如果到目前为止还不可能,我也想知道是否有任何我可以覆盖的暴露事件,以便我可以注入我的代码,获取异常,做我想做的任何事情。
我知道我可以在Global.asax中覆盖一些事件。喜欢过滤:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
}
void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs )
{
}
还有更多吗?我在哪里可以找到这些事件的清单?
答案 0 :(得分:6)
关于创建Elmah事件日志提供程序,如果您打算将错误信息存储在事件日志中并使用ELMAH UI,则可能不太好。 related question有一个关于这个主题的Matthew Daugherty的优秀答案:
ELMAH错误日志类不是 只写;他们还阅读了日志 数据,以便它可以显示 ELMAH网络界面。另外, ELMAH记录的不仅仅是异常 信息。它还记录服务器 变量,表单集合和 重现所需的信息 死亡的黄色屏幕。即使 你要记录所有这些 信息到事件日志 难以理解为纯文本, 并且很难再读回来 这样一种ELMAH网络 界面可以使用它。如果你不是 将使用ELMAH Web界面 那显然不是问题。
为了创建自定义日志记录提供程序,您可以继承ErrorLog并覆盖GetError(通过id获取单个错误;由Elmah UI使用),GetErrors(列出页面上的所有错误;由Elmah UI使用)和记录(记录新错误)方法以提供您自己的存储机制。有关如何实现自定义ErrorLog的检查,请参阅this article。
然后在配置中注册新的ErrorLog提供程序:
<elmah>
<errorLog type="MyNamespace.MyErrorLog, MyAssemblyName"/>
</elmah>
关于事件,它们由Elmah模块发出。在ErrorLogModule中有两个事件 - 记录和过滤。在ErrorMailModule中有四个事件 - Filtering,Mailing,Mailed和DisposingMail。