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