繁体   English   中英

如何使Elmah与UnobservedTaskException一起工作

[英]How to make Elmah work with UnobservedTaskException

我正在开发一个asp.net mvc应用程序。 我的应用程序的体系结构如下:

  1. 一个用于访问数据库的DBAccessLayer //层
  2. //连接1和3的ServiceLayer层。
  3. 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM