[英]How to make Elmah work with UnobservedTaskException
我正在开发一个asp.net mvc应用程序。 我的应用程序的体系结构如下:
我想记录所有应用程序异常,包括TaskScheduler.UnobservedTaskException事件中的异常。
我已经测试过要执行以下操作:
protected void Application_Start()
{
...
TaskScheduler.UnobservedTaskException += (object sender, UnobservedTaskExceptionEventArgs excArgs) =>
{
ErrorSignal.FromCurrentContext().Raise(excArgs.Exception);
excArgs.SetObserved();
};
}
但是,当引发UnobservedTaskException事件时,应用程序崩溃,出现以下异常:
System.ArgumentNullException was unhandled
Message=Value cannot be null.
Parameter name: context
Source=Elmah
ParamName=context
StackTrace:
at Elmah.ErrorSignal.FromContext(HttpContext context) in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 67
at MyMvcApplication.<Application_Start>b__0(Object sender, UnobservedTaskExceptionEventArgs excArgs) in ...\Global.asax.cs:line 82
at System.Threading.Tasks.TaskScheduler.PublishUnobservedTaskException(Object sender, UnobservedTaskExceptionEventArgs ueea)
at System.Threading.Tasks.TaskExceptionHolder.Finalize()
另外,我将UnobservedTaskException事件放在WebLayer的global.asax.cs中,当DBAccessLayer和ServiceLayer具有未观察到的异常时可以触发该事件吗?
谢谢。
看来,当您的处理程序被解雇时,没有HttpContext,因为计划的任务没有作为HTTP请求的一部分运行。 而不是使用
ErrorSignal.FromCurrentContext().Raise
你可以用
ErrorLog.GetDefault(null).Log
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.