何时或何时记录MVC 5应用程序中的异常

时间:2016-05-16 19:31:41

标签: c# asp.net-mvc logging exception-handling asp.net-mvc-5

我想通过大量的建议来使用全局HandleErrorAttribute,但这个属性似乎直接显示Error视图,让我无法记录异常。我不认为该视图是日志记录和其他业务逻辑的正确位置。

我也可以选择在OnException覆盖BaseController,但我担心会与HandleErrorAttribute发生冲突。如果我按如下方式覆盖OnException,未处理异常,是否会继续HandleErrorAttribute

protected override void OnException(ExceptionContext filterContext)
{
    Exception exception = filterContext.Exception;
    var controller = filterContext.RouteData.Values["controller"].ToString();
    var action = filterContext.RouteData.Values["action"].ToString();
    logger.Error(exception, "Exception in controller '{0}': action '{1}'.", controller, action);
    filterContext.Exception = exception;
    //filterContext.ExceptionHandled = true;
}

或者我如何记录异常呢?我相信上面两种方法使我无法在每个操作方法上实现'try-catch',并且通过捕获特定的异常,这可能是相当繁琐的。我还想选择重新启动应用程序,或者应该发生一些真正的灾难性异常,并且HandleErrorAttribute不会为此留下太多空间。

3 个答案:

答案 0 :(得分:3)

通常,Global.asax是一个很好的地方:

protected void Application_Error(object sender, EventArgs e)
{
    // Get the exception object.
    Exception exception = Server.GetLastError();

    // Handle Exception

    // Call Server.ClearError() if the exception is properly handled
}

答案 1 :(得分:1)

是使用Global.asax

protected void Application_Error(object sender, EventArgs e)
{
   System.Web.HttpRuntime.UnloadAppDomain();
}

答案 2 :(得分:0)

查看StackExchange.Exceptional,这是一个为SO创建并使用的开源异常记录器。

https://github.com/NickCraver/StackExchange.Exceptional