我正在开发一个asp.net mvc应用程序。我的应用程序的体系结构如下:
一个DBAccessLayer //用于访问数据库的层
//连接1和3的ServiceLayer层。
WebLayer // Web UI层
我想记录所有应用程序异常,包括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
关于c# - 如何使Elmah与UnobservedTaskException一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9576451/