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中的全局異常的記錄方法,呵呵。


發佈了40 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章