在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()); } }