愛上MVC3系列~全局異常處理與異常日志


回到目錄

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

1   RegisterGlobalFilters(GlobalFilters.Filters);

它的主要使用是將全局過濾器進行注冊,而全局過濾器可以在RegisterGlobalFilters這個方法里進行設置,如代碼:

 1    /// <summary>
 2         /// 全局過濾器(特性)
 3         /// </summary>
 4         /// <param name="filters"></param>
 5         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 6         {
 7             // ExceptionLogAttribute繼承自HandleError,主要作用是將異常信息寫入日志系統中
 8             filters.Add(new Web.Commons.Attributes.ExceptionLogAttribute());
 9             //默認的異常記錄類
10             filters.Add(new HandleErrorAttribute());
11         }

當我們設置完上面兩塊后,現在如果想記異常日志,那我們需要完善一下ExceptionLogAttribute這個類,看代碼:

 1    /// <summary>
 2     /// 異常持久化類
 3     /// </summary>
 4     public class ExceptionLogAttribute : HandleErrorAttribute
 5     {
 6         /// <summary>
 7         /// 觸發異常時調用的方法
 8         /// </summary>
 9         /// <param name="filterContext"></param>
10         public override void OnException(ExceptionContext filterContext)
11         {
12 
13             string message = string.Format("消息類型:{0}<br>消息內容:{1}<br>引發異常的方法:{2}<br>引發異常的對象:{3}<br>異常目錄:{4}<br>異常文件:{5}"
14                 , filterContext.Exception.GetType().Name
15                 , filterContext.Exception.Message
16                 , filterContext.Exception.TargetSite
17                 , filterContext.Exception.Source
18                 , filterContext.RouteData.GetRequiredString("controller")
19                 , filterContext.RouteData.GetRequiredString("action"));
20             VLog.VLogFactory.CreateVLog().ErrorLog(message); //TODO:將 ex 錯誤對象記錄到系統日志模塊
21             base.OnException(filterContext);
22         }
23     }

大家可以看到,在上面類中,有個CreateVLog的方法,它是干什么用的呢,實事上,它就是我們的日志功能類,可以對日志進行不同類型的持久化,這我會在單獨一講中去說明它。

今天主要就是MVC3中的全局異常的記錄方法,呵呵。

 

回到目錄


免責聲明!

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



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