C# Elmah未过滤/察觉web api上的错误

C# Elmah未过滤/察觉web api上的错误,c#,asp.net-web-api,elmah,C#,Asp.net Web Api,Elmah,我有一个Web Api应用程序,它配置了Elmah并正常工作,日志是正常创建的 为了隐藏/删除日志中的敏感数据,我尝试了,但对我的Web Api控制器不起作用。只有当MVC管道中发生错误时(项目中有MVC和WebAPI控制器),才会命中过滤器 我也检查了问题,但我的配置文件似乎还可以: <sectionGroup name="elmah"> <section name="security" requirePermission="false" type="El

我有一个Web Api应用程序,它配置了Elmah并正常工作,日志是正常创建的

为了隐藏/删除日志中的敏感数据,我尝试了,但对我的Web Api控制器不起作用。只有当MVC管道中发生错误时(项目中有MVC和WebAPI控制器),才会命中过滤器

我也检查了问题,但我的配置文件似乎还可以:

    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>

    [...]

   <location path="." inheritInChildApplications="false">
      <system.web>
          <httpModules>
              <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
              <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
              <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
          </httpModules>
          [..]
      </system.web>
   </location>

   [...]

   <system.webServer>
       <modules runAllManagedModulesForAllRequests="true">
           <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
           <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
           <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
       </modules>
  </system.webServer>

作为附加信息,如果我对system.web>httpModules部分进行注释,日志仍在正常创建。

ELMAH不会即时记录ASP.NET web API生成的错误。您还需要安装Elmah.Contrib.WebApi包:

Install-Package Elmah.Contrib.WebApi
然后将Web API配置为在WebApiConfig.cs中使用ELMAH作为异常记录器:

config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
有关更多信息,请查看我编写的指南。在本教程中,您需要将elmah.io包替换为,因为您可能正在使用其他错误记录器之一


我刚刚验证了安装这些软件包实际上会触发您添加到问题中的ErrorLog_过滤代码。

您使用的是哪个ELMAH nuget软件包?ELMAH 1.2.2,它依赖于ELMAH.corebrary(也有1.2.2),谢谢。一个简短的问题:在我的过滤器上,我调用了“e.discouse()”,但仍在创建两个日志文件。还有另一种方法来抑制日志创建吗?(我基本上如下所述)即使您取消了该错误,还是仍然记录了该错误?还是您正在引用的一些日志文件?即使取消了该错误,仍然记录了该错误。我需要取消它,因为我手动创建它
ErrorLog.GetDefault(null).Log(error)所以它只显示我想要的数据。我以前编写并测试过这个解决方案:是的,它正在工作。问题是应用程序的另一个服务在抛出异常时写入相同的日志。再次感谢您的帮助:)
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());