Elmah没有为webapi例外发送电子邮件

时间:2013-06-28 19:22:57

标签: asp.net-web-api elmah elmah.mvc

我已经设置了elmah,通过在ELMAH and API controller in MVC4 not logging errors中所述的webapi事件中包含一个httpfilter来获取webapi例外。 它工作,我可以看到错误发送到elmah数据库,问题是errorMail模块似乎无法接收它们,即使它拿起那些正常的操作没有问题
我删除了所有错误过滤器,这不是发送电子邮件的原因 我还尝试通过在global.asax中添加void ErrorMail_Filtering(对象发送器,ExceptionFilterEventArgs args)方法来设置电子邮件的特殊过滤器,但对于webapi异常,这甚至从未达到过(对于非webapi例外工作正常)
其他人遇到过这个并知道如何修复它?我不想替换elmah电子邮件过滤器...

1 个答案:

答案 0 :(得分:5)

我使用Elmah.ErrorSignal.FromCurrentContext().Raise(...)而不是Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(...),因为所有配置的错误记录器都有机会消耗异常。因此,例外将出现在Elmah.axd中,我将收到一封电子邮件。如果我使用Log,它只会转到默认错误记录器,但我没有收到电子邮件。

除了

Web API 2.1已经改进global error handling。如果你可以使用v2.1我建议走这条路。

public class UnhandledExceptionLogger : ExceptionLogger
{
    public override void Log(ExceptionLoggerContext context)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(context.Exception);
    }
}

要使用它,请将其注册为HttpConfiguration,如下所示:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    // ...
    config.Services.Add(typeof(IExceptionLogger), new UnhandledExceptionLogger());

    // Web API routes
    // ...
}