我有 MVC3 应用程序,其中非常重要的是正确记录生产中可能发生的所有错误。
当前方法使用 IExceptionFilter.OnException。该功能应用在 BaseContorller 上,所有其他控制器都继承自 BaseContorller,看起来(略微简化)如下:
public class BaseController : Controller, IExceptionFilter
{
protected override void OnException(ExceptionContext exceptionContext)
{
Logger.Error(exceptionContext.Exception);
}
}
这种方法效果很好,适用于:
源自控制器操作方法中的代码的异常
源自控制器方法返回的视图的异常,包括编译错误
- 应用于控制器的过滤器中的异常
但是,使用这种方法不会捕获到一些异常:
- 控制器构造函数中抛出的异常
- 应用程序例程中抛出的异常,例如:RegisterGlobalFilters、RegisterRoutes、Application_Start
- 找不到页面 (404)
是否有任何其他类型的异常可以被控制器级异常处理遗漏?
我之所以问,是因为我可能会使用 Application_Error 或 ELMAH 实现额外的日志记录层,并且我想验证这些异常中没有一个会在未记录的情况下溜走。