Mvc获取ErrMessage,并写入ErrLog日志

在Mvc里面我们知道有自带的Filter方法,也就是我们说的Aop横向切面编程

首先自定义 CustomeFilterAttribute类,继承FilterAttribute方法,同时继承IExceptionFilter接口

(还可以继承 IActionFilter, IAuthorizationFilter  IResultFilter等接口),然后实现OnException方法

先看代码:

public class CustomeFilterAttribute : FilterAttribute, IExceptionFilter     {  

       public void OnException(ExceptionContext filterContext)    

     {            

//ErrLog路径       

      string path = HttpContext.Current.Server.MapPath("/Logs/ErrLogs.txt");    

         //出错时间    

         string ErrTime = DateTime.Now.ToString();       

      //错误类型       

      string ErrType = filterContext.Exception.GetType().ToString();         

    //错误信息       

      string ErrMessage = filterContext.Exception.Message;         

    //引发异常的方法   

          string targetsite = filterContext.Exception.TargetSite.ToString();     

        //引发异常的对象     

        string source = filterContext.Exception.Source.ToString();

            //异常Controller名称       

      string controller = filterContext.RouteData.Values["controller"].ToString();   

          //异常Action名称       

      string action = filterContext.RouteData.Values["action"].ToString();     

        string ErrStr = string.Format("时间:{0} ,错误类型:{0},错误信息:{2},异常的方法:{3},异常的对象:{4},Controller名称:{5},Action名称:{6}", ErrTime, ErrType, ErrMessage, targetsite, source, controller, action);             WriteLog(path, true, ErrStr);  

       }

        private void WriteLog(string path, bool append, string ErrStr)  

       {            

StreamWriter writer = new StreamWriter(path, append);    

         writer.WriteLine(ErrStr);        

     writer.Flush();       

      writer.Dispose();      

   }  

    }

现在已经实现写Err的方法了,接下来看如何捕捉Err。

我们要自定义一个BaseController

  [CustomeFilter]  

   public class BaseController : Controller  

   {        

      public BaseController()      

     {

    }

}

然后让所有你写的Controller都继承BaseController,就实现捕捉异常了

原文地址:https://www.cnblogs.com/a546558309/p/2568732.html