Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当使用控制器级异常日志记录(IEExceptionFilter.OneException)时,哪些异常会漏掉?_C#_.net_Asp.net Mvc_Asp.net Mvc 3_Error Logging - Fatal编程技术网

C# 当使用控制器级异常日志记录(IEExceptionFilter.OneException)时,哪些异常会漏掉?

C# 当使用控制器级异常日志记录(IEExceptionFilter.OneException)时,哪些异常会漏掉?,c#,.net,asp.net-mvc,asp.net-mvc-3,error-logging,C#,.net,Asp.net Mvc,Asp.net Mvc 3,Error Logging,我有一个MVC3应用程序,在这个应用程序中,正确记录生产中可能发生的所有错误是非常重要的 当前方法使用IEExceptionFilter.OneException。该功能应用于BaseController,所有其他控制器都从中继承,看起来(稍微简化)如下: public class BaseController : Controller, IExceptionFilter { protected override void OnException(ExceptionCon

我有一个MVC3应用程序,在这个应用程序中,正确记录生产中可能发生的所有错误是非常重要的

当前方法使用IEExceptionFilter.OneException。该功能应用于BaseController,所有其他控制器都从中继承,看起来(稍微简化)如下:

public class BaseController : Controller, IExceptionFilter
{        
    protected override void OnException(ExceptionContext exceptionContext)
    {
        Logger.Error(exceptionContext.Exception);
    }
}
这种方法非常有效,因为:

  • 源自控制器操作方法内代码的异常

  • 源自控制器方法返回的视图的异常, 包括编译错误

  • 应用于控制器的筛选器中的异常
但是,使用此方法无法捕获例外情况:

  • 控制器构造函数中引发的异常
  • 应用程序例程中引发的异常,例如:RegisterGlobalFilter、RegisterRoutes、application\u Start
  • 找不到页面(404)
您是否可以想到控制器级异常处理可能会遗漏的任何其他类型的异常


我这样问是因为我可能会使用Application_Error或ELMAH实现额外的日志记录层,我想验证这些异常中没有一个是未被记录的。

任何没有通过MVC管道的东西都不会被这个实现捕获。HttpHandler、WebAPI实现、ServiceStack添加等

再加一层艾玛不会有什么害处,但我可能会选择其中一层。如果您分割错误处理,则调试时的工作量可能会加倍

“我的伐木工人抓到了还是埃尔玛抓到了?”

由于Elmah接近ASP.NET金属,因此我将坚持使用Elmah,并将您的异常保留在一个地方

 NuGet Install-Package Elmah.MVC
作为补充说明,您可能仍然希望记录器进行跟踪,但这在代码中比未处理的异常表达得更明确

 Logger.Info("Just got another Sale, W00t!")

我同意你的意见。