C# 当使用控制器级异常日志记录(IEExceptionFilter.OneException)时,哪些异常会漏掉?
我有一个MVC3应用程序,在这个应用程序中,正确记录生产中可能发生的所有错误是非常重要的 当前方法使用IEExceptionFilter.OneException。该功能应用于BaseController,所有其他控制器都从中继承,看起来(稍微简化)如下: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
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!")
我同意你的意见。