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