WebAPI 2中的Elmah库错误处理

问题描述 投票:0回答:2

我已经为Elmah.WebApi和elmah.Mvc安装了nuget软件包,该软件包捕获了很多错误。但是,我有一个并行的foreach循环,该循环抛出错误并且没有被elmah捕获/记录。

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

是否需要使用其他过滤器来捕获在单独线程中发生的错误?我猜这在使用异步/等待时是否同样适用?

这是我的代码:

Parallel.ForEach(serviceHeaders, new ParallelOptions() { MaxDegreeOfParallelism = 8 }, patientGroup =>
{
    ...
}
c# asp.net-web-api2 elmah elmah.mvc
2个回答
1
投票

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

您可能可以在没有请求上下文的情况下将Elmah用于manual logging,但是解决此问题的正确方法是使用分布式系统,例如Azure WebJob,队列/消息系统等。

如果您不想走那么远,最好等待异步操作,而Elmah会捕获异常。

更多信息here


0
投票

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

但是,我遇到的问题与我的问题完全无关!

© www.soinside.com 2019 - 2024. All rights reserved.