C# 如何在DB中记录所有错误,但仅在有条件的基础上记录电子邮件错误?
我希望只在特定条件下发送电子邮件,并在所有情况下在DB中记录错误。但据我所知,过滤不能用于这两种方法中的一种。是这样吗?如果是这样的话,我怎样才能做到呢 还要注意的是,现在在C# 如何在DB中记录所有错误,但仅在有条件的基础上记录电子邮件错误?,c#,asp.net,elmah,error-logging,C#,Asp.net,Elmah,Error Logging,我希望只在特定条件下发送电子邮件,并在所有情况下在DB中记录错误。但据我所知,过滤不能用于这两种方法中的一种。是这样吗?如果是这样的话,我怎样才能做到呢 还要注意的是,现在在global.asax中的ErrorMail\u Mailing。由于电子邮件将仅在有条件的基础上发送,并且只有在发送电子邮件时才会触发ErrorMail\u Mailing,因此我想知道如何将所有错误的附加信息保存到数据库中 更新:我对Elmah代码进行了一些修改,以满足我的需要。如果您想将所有异常保存到数据库中,您应该能
global.asax
中的ErrorMail\u Mailing
。由于电子邮件将仅在有条件的基础上发送,并且只有在发送电子邮件时才会触发ErrorMail\u Mailing
,因此我想知道如何将所有错误的附加信息保存到数据库中
更新:
我对Elmah代码进行了一些修改,以满足我的需要。如果您想将所有异常保存到数据库中,您应该能够像这样使用ErrorLogModule,它应该独立于您在错误邮件模块中所做的操作:
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
然后在配置的elmah Section中:
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnectionString" />
第一步是配置模块。确保在Elmah的任何日志记录模块之后添加Elmah.ErrorFilterModule,如下所示:
<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,但它不适合我们的特殊需求
在网络级别发生错误时,需要非常、非常大的错误日志记录
事件发生
StackExchange.Exception是由内部使用的错误处理程序
用于记录到SQL的堆栈交换和堆栈溢出
它还支持JSON和内存错误存储,过滤异常
日志记录之前,以及存储错误的失败/重试机制,如果
连接到错误存储时发生中断
它是高度可定制的,并且根据您的需要添加一些东西非常容易。
正如我所看到的,pull请求实现了电子邮件功能,因此您可以从那里开始
要设置它,您只需查看并选择要启用的内容
希望对您有所帮助。上的ELMAH文档对您的场景有一个精确的描述,称为,相当于。例如,以下操作将阻止404 HTTP错误被邮寄,但它们仍将被记录(假设邮寄和记录模块都已注册):
那么发电子邮件怎么样?现在我已经获取了ELMAH的源代码,并根据自己的目的对其进行了修改。但这需要时间。非常感谢您的详细回答。我已经修改了Elmah代码以满足我的需要。
<configSections>
<configSections>
<sectionGroup name="elmah">
<section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
<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>
<errorFilter>
<test>
<and>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<regex binding="FilterSourceType.Name" pattern="mail" />
</and>
</test>
</errorFilter>