【问题标题】:Elmah not filtering/intecepting errors on web apiElmah 没有过滤/拦截 web api 上的错误
【发布时间】:2016-12-22 21:06:44
【问题描述】:

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

为了隐藏/删除日志中的敏感数据,我尝试了this,但它不适用于我的 Web Api 控制器。只有在 MVC 管道中发生错误时才会触发过滤器(项目中有 MVC 和 Web API 控制器)。

我也检查了this 的问题,但我的配置文件似乎没问题:

    <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>

Global.asax 中的过滤器:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    var ctx = e.Context as HttpContext;

    if (ctx == null) return;

    ElmahDataFilter.Apply(e, ctx);
}

作为附加信息,如果我评论 system.web>httpModules 部分,日志仍在正常创建中。

【问题讨论】:

  • 您使用的是哪个 ELMAH nuget 包?
  • elmah 1.2.2,它依赖于 elmah.corelibrary(1.2.2 也是)

标签: c# asp.net-web-api elmah


【解决方案1】:

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

Install-Package Elmah.Contrib.WebApi

然后在您的 WebApiConfig.cs 中配置 Web API 以使用 ELMAH 作为异常记录器:

config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());

有关更多信息,请查看我编写的指南Logging to ELMAH from Web API。在本教程中,您需要将 elmah.io 包替换为 ELMAH,因为您可能正在使用其他错误记录器之一。

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

【讨论】:

  • 就是这样,谢谢。一个简单的问题:在我的过滤器上,我正在调用“e.Dismiss()”,但仍在创建两个日志文件。还有另一种抑制日志创建的方法吗? (我基本上是在关注this steps
  • 是否仍然记录错误,即使您将其关闭,还是您指的是一些日志文件?
  • 即使关闭错误仍会记录。我需要关闭它,因为我手动创建它ErrorLog.GetDefault(null).Log(error); 所以它只显示我想要的数据。
  • 我之前已经编写并测试过这个解决方案:docs.elmah.io/remove-sensitive-form-data
  • 是的,它正在工作。问题是应用程序的另一项服务在引发异常时写入相同的日志。再次感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2012-04-08
  • 2014-06-16
  • 2011-04-24
  • 2018-03-31
  • 2017-03-07
  • 2016-08-31
相关资源
最近更新 更多