C# 如何在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代码进行了一些修改,以满足我的需要。如果您想将所有异常保存到数据库中,您应该能

我希望只在特定条件下发送电子邮件,并在所有情况下在DB中记录错误。但据我所知,过滤不能用于这两种方法中的一种。是这样吗?如果是这样的话,我怎样才能做到呢

还要注意的是,现在在
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>