C# 在MVC 5应用程序中记录异常的位置或时间

C# 在MVC 5应用程序中记录异常的位置或时间,c#,asp.net-mvc,logging,exception-handling,asp.net-mvc-5,C#,Asp.net Mvc,Logging,Exception Handling,Asp.net Mvc 5,我想按照很多建议只使用全局HandleErrorAttribute,但该属性似乎直接显示Error视图,没有地方记录异常。我不认为视图是日志记录和其他业务逻辑的正确位置 我还可以选择在我的BaseController中重写OnException,但担心与HandleErrorAttribute冲突。如果我按如下方式重写了OnException,而不处理异常,它是否会继续执行到HandleErrorAttribute protected override void OnException(Exce

我想按照很多建议只使用全局
HandleErrorAttribute
,但该属性似乎直接显示
Error
视图,没有地方记录异常。我不认为视图是日志记录和其他业务逻辑的正确位置

我还可以选择在我的
BaseController
中重写
OnException
,但担心与
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
也没有留下太多空间。

通常,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
}

查看StackExchange.exception,它是为SO创建并由SO使用的开源异常记录器

是使用Global.asax

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

相关文档如下:关闭应用程序只是一个例外情况。我的问题主要是关于在哪里做异常日志记录。但是谢谢,我不知道怎么关机。