我希望电子邮件仅在特定条件下发送,并且在所有情况下都会在DB中记录错误。但据我了解,过滤不适用于其中之一。是对的吗?如果是的话,我该如何实现呢?
另请注意,现在I'm saving additional info to database ErrorMail_Mailing
位于global.asax
,Atif Aziz回复了{{3}}。因为电子邮件只会在有条件的基础上发送,ErrorMail_Mailing
仅在发送电子邮件时才会触发,我想知道如何将所有错误的其他信息保存到数据库中。
更新:我已经修改了Elmah代码以满足我的需要。
答案 0 :(得分:2)
第一步是配置模块。确保在ELMAH的任何日志记录模块之后添加Elmah.ErrorFilterModule,如此处所示,带有ErrorLogModule:
<httpModules>
...
//email
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
//sql
<add name="ErrorSql" type="Elmah.SqlErrorLog, Elmah"/>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
...
</httpModules>
然后在您的配置部分注册Elmah.ErrorFilterSectionHandler,如下所示:
<configSections>
<configSections>
<sectionGroup name="elmah">
<section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
现在,您可以添加过滤器以确定要为哪些源忽略哪些错误。以下示例说明如何防止邮寄404 HTTP错误。
<elmah>
<errorMail from="xx@xx.com" fromName="xx" to="xx@xx.com" subject="An unhandled exception occured xxx" priority="Normal" async="false" smtpServer="xx.xx.xx.com"/>
//sql
<errorLog name="ErrorSql" type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
<errorFilter>
<test>
<and>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<regex binding="FilterSourceType.Name" pattern="mail" />
</and>
</test>
</errorFilter>
</elmah>
您可以在以下链接中找到更多详细信息。
答案 1 :(得分:1)
error filtering上的ELMAH文档在您的方案中有一个section并被调用,相当于filtering by source。例如,以下内容将阻止404 HTTP错误被邮寄,但它们仍将被记录(假设邮件和日志记录模块都已注册):
<errorFilter>
<test>
<and>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<regex binding="FilterSourceType.Name" pattern="mail" />
</and>
</test>
</errorFilter>
答案 2 :(得分:0)
如果要保存数据库的所有异常,您应该只能使用ErrorLogModule,这应该与您在错误邮件模块中执行的操作无关:
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
然后在你的配置的elmah版本中:
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" />
答案 3 :(得分:0)
您应该试用StackExchange.Exceptional
这个项目的灵感来自ELMAH,但它并不适合我们的特殊情况 在网络级别需要非常非常高的容量错误记录 事件发生。
StackExchange.Exceptional是内部使用的错误处理程序 用于记录到SQL的堆栈交换和堆栈溢出。
它还支持JSON和内存错误存储,过滤异常 在记录之前,以及用于存储错误的失败/重试机制 连接到错误存储区时出现中断。
它是高度可定制的,并且根据您的需要添加内容非常容易。 我可以看到拉取请求已实现电子邮件功能Email functionality,因此您可以从那里开始。
要设置它,您只需要查看web.config 并选择要启用的内容。
希望它有所帮助。