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

 

posted @ 2016-06-29 10:12  那就让我这样吧  阅读(2165)  评论(0编辑  收藏  举报