相关疑难解决方法(0)

ASP.Net MVC异常日志记录与错误处理相结合

我正在寻找一个简单的解决方案,在我的ASP.Net MVC 1.0应用程序中结合错误处理进行异常记录.

我已经阅读了很多文章,包括StackOverflow上发布的问题,这些文章都针对不同情况提供了不同的解决方案.我仍然无法提出适合我需求的解决方案.

这是我的要求:

  1. 为了能够在我的Controller上使用[HandleError]属性(或类似的东西),处理可能从任何Actions或Views中抛出的所有异常.这应该处理所有未在任何操作上专门处理的异常(如第2点所述).对于Controller中的所有操作,我希望能够指定在错误情况下必须将用户重定向到哪个View.

  2. 我希望能够在特定Actions的顶部指定[HandleError]属性(或等效的东西)以捕获特定异常并将用户重定向到适合该异常的View.所有其他异常仍必须由Controller上的[HandleError]属性处理.

  3. 在上述两种情况下,我都希望使用log4net(或任何其他日志记录库)记录异常.

我如何实现上述目标?我已经阅读过让我的所有控制器继承自一个覆盖OnException方法的基本控制器,并且我在其中进行日志记录.但是,这会将用户重定向到适当的视图,或者使其变得混乱.

我已经阅读过编写自己的Filter Action来实现IExceptionFilter来处理这个问题,但这会与[HandleError]属性冲突.

到目前为止,我的想法是,最好的解决方案是编写自己继承自HandleErrorAttribute的属性.这样我就可以获得[HandleError]的所有功能,并且可以添加我自己的log4net日志记录.解决方案如下:

    public class HandleErrorsAttribute: HandleErrorAttribute {

      private log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

      public override void OnException(ExceptionContext filterContext)
      {
          if (filterContext.Exception != null)
          {
            log.Error("Error in Controller", filterContext.Exception);
          }

          base.OnException(filterContext);
      }
   }
Run Code Online (Sandbox Code Playgroud)

以上代码是否适用于我的要求?如果没有,哪种解决方案能满足我的要求?

asp.net-mvc logging log4net exception-handling

22
推荐指数
1
解决办法
2万
查看次数