8

我正在尝试使用 elmah 从我的 asp.net web api 项目中记录异常。我遇到了一个问题,每个错误都被记录了两次。

我正在使用 Elmah.Contrib.Web-Api,我的 Application 类如下:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);

#if DEBUG
        EntityFrameworkProfiler.Initialize();
#endif

        GlobalConfig.CustomizeConfig(GlobalConfiguration.Configuration);

    }
}

如果我注释掉以下行,那么我根本不会收到任何消息:

GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

而且我可以确认我只抛出了一个错误,并且只调用了一次生成错误的调用,并且我没有使用 Elmah 属性手动修饰我的控制器或方法。

为了尝试解决这个问题,我删除了 Contrib 包并按照此处的说明添加了http://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration

这并没有解决问题,它仍然记录了两次。它确实允许我在 Attribute 类中放置一个断点,并确认每个错误都被调用了两次。

我该如何解决这个问题?

4

6 回答 6

4

您的 web.config 中有哪些与 ELMAH 相关的条目?

我在 MVC 应用程序中遇到了类似的问题 - 处理的异常被记录了两次。在应用程序中,我使用自定义异常过滤器通过错误信号将处理的异常记录到 ELMAH,而 HTTP 模块负责处理未处理的异常。

原来我需要设置:

<add key="elmah.mvc.disableHandleErrorFilter" value="true" />

在 web.config 中以禁用 ELMAH.MVC NuGet 包中的内置异常过滤器。

内置过滤器的源代码显示它记录处理的异常: https ://github.com/alexanderbeletsky/elmah-mvc/blob/master/src/Elmah.Mvc/HandleErrorAttribute.cs

于 2013-05-28T14:33:23.853 回答
3

我会检查你的 FilterConfig.cs 类,有可能在那里添加了默认的 HandleErrorAttribute 并重新抛出你的异常?

于 2013-03-14T09:49:21.987 回答
3

对于它的价值,我遇到了 ELMAH 在我的 Web API 应用程序中两次记录每个异常的问题(使用 Elmah.Contrib.WebApi)。

将我的 ELMAH 电子邮件与我的源历史记录进行比较,我能够确定问题是在通过 nuget 安装 Ninject.Web.WebApi 3.0.2-unstable-9016 包后开始发生的。

果然,卸载包并注释掉正在使用它的单个依赖绑定解决了双重异常记录问题。重新安装软件包并将依赖项绑定注释掉会导致问题再次出现,因此不是绑定本身。

安装以前的版本(Ninject.Web.WebApi 3.0.2-unstable-8)并没有导致问题发生,但是我的依赖绑定不再起作用。

我选择暂时忍受这个问题。

于 2013-09-11T05:24:01.960 回答
0

你看过这个帖子吗?作者使用一个 ExceptionFilter 来处理日志记录异常

于 2013-05-21T04:14:09.380 回答
0

对于其他有两次记录问题的人(我认为这对 OP 没有帮助?) - 这发生在我身上,原因是我已经在全球范围内应用了过滤器

GlobalConfiguration.Configuration.Filters.Add(new ElmahErrorAttribute()); //log web api errors

但也将属性应用于类(doh!)

[ElmahError]
public class TestController : ApiController

所以当然它记录了两次。

于 2014-04-24T15:55:42.250 回答
0

我有这个问题只发生在 HTTP401响应上。问题原来是启用了 Windows 身份验证,这导致浏览器发出第二次协商请求。

就我而言,我只能在 web.config 中禁用 Windows 身份验证:

<security>
  <authentication>
    <windowsAuthentication enabled="false" />
  </authentication>
</security>

注意:如果您没有解锁配置部分,您可以在 IIS 中禁用 Windows 身份验证。

于 2015-05-26T03:17:59.787 回答