WebAPI 2中的Elmah库错误处理

本文关键字:错误 处理 Elmah 中的 WebAPI | 更新日期: 2023-09-27 18:00:56

我已经为Elmah.WebApi和Elmah安装了nuget包。Mvc,它捕捉到了我的很多错误。然而,我有一个平行的foreach循环,它抛出了一个错误,并且没有被elmah捕获/记录。

我假设nuget包将实现此处指定的类和接口:http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

是否需要应用额外的过滤器来捕获在单独线程中发生的错误?我猜在使用async/await时也是如此?

这是我的代码:

Parallel.ForEach(serviceHeaders, new ParallelOptions() { MaxDegreeOfParallelism = 8 }, patientGroup =>
{
    ...
}

WebAPI 2中的Elmah库错误处理

如果您在Web API中将Elmah注册为IExceptionLogger(可能由Nuget包自动完成(,则它需要当前主线程的HttpContext。一旦上下文消失,即返回到客户端,就不会再捕捉到任何异常。

您可能可以在没有请求上下文的情况下使用Elmah进行手动日志记录,但解决此问题的正确方法是使用分布式系统,如Azure WebJobs、队列/消息系统等。

如果你不想走那么远,最好等待异步操作,Elmah会捕捉到异常。

点击此处了解更多信息。

事实证明,elmah确实捕获了并行线程中引发的错误。每个错误都被添加到AggregateException中,因为理论上每个线程都可能同时抛出错误。更多信息可以在这里找到:https://msdn.microsoft.com/en-us/library/dd460695(v=vs.110(.aspx

然而,我遇到的问题与我的问题完全无关!