MVC小系列(十三)【全局異常處理與異常日志】


在MVC網站的global.asax中的Application_Start方法里,有這樣一段代碼 

 

   protected void Application_Start()
        {
            //它的主要作用是將全局過濾器進行注冊,而全局過濾器可以在RegisterGlobalFilters這個方法里進行設置
 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration); 
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }

 

第一步:開發異常持久化類:

     /// <summary>
    /// 異常持久化類
    /// </summary>
    public class ExceptionLogAttribute : HandleErrorAttribute
    {
        /// <summary>
        /// 觸發異常時調用的方法
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {

            string message = string.Format("消息類型:{0}<br>消息內容:{1}<br>引發異常的方法:{2}<br>引發異常的對象:{3}<br>異常目錄:{4}<br>異常文件:{5}"
                , filterContext.Exception.GetType().Name
                , filterContext.Exception.Message
                , filterContext.Exception.TargetSite
                , filterContext.Exception.Source
                , filterContext.RouteData.GetRequiredString("controller")
                , filterContext.RouteData.GetRequiredString("action"));
            // VLog.VLogFactory.CreateVLog().ErrorLog(message); //TODO:將 ex 錯誤對象記錄到系統日志模塊
            base.OnException(filterContext);
        }
    }

第二步:將異常放進過濾器里

  public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            // ExceptionLogAttribute繼承自HandleError,主要作用是將異常信息寫入日志系統中
            filters.Add(new ExceptionLogAttribute());
            ////默認的異常記錄類
            filters.Add(new HandleErrorAttribute());
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM