我已经设置了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电子邮件过滤器...
答案 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
// ...
}