zoukankan      html  css  js  c++  java
  • MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能

    1.MVC4.0中HandleErrorAttribte已经帮我们处理了异常问题,当我们新建一个非空的MVC项目时候,在FilterConfig中会发现这样的代码

        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
            }
        }
    

     这时候,我们打开web.config中实现customerrors节点的配置,用户就看不到黄页了,将根据异常码,访问你指定的错误页面。

    2.上面是为了解决用户体验问题,但是作为开发者,为了更好的维护站点,我们应该了解更多的异常信息,下面我们自定义一个异常类

        public class ExceptionHandlerAttribute : HandleErrorAttribute
        {
            public override void OnException(ExceptionContext filterContext)
            {
                base.OnException(filterContext);
    
                LogHelper.Error(filterContext.Exception.ToString());
            }
        }
    

     接下来将我们自定义的属性注入到全局筛选器中,当项目发生异常的时候,会将异常发送到我们自定义的ExceptionHandlerAttribute中进行处理

        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new ExceptionHandlerAttribute());
            }
        }
    

     由于我们使用了log4net记录错误日志,所以我们还需要对log4net进行配置,首先在Application_Start()中初始化log4net的配置

        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterAuth();
    
                LogHelper.LoadConfig(Server.MapPath("~/Config/log4net.config"));
            }
        }
    

     根据自己的需求,配置log4net.config

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net>
        <!-- 日志文件部分log输出格式的设定 -->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--最小锁定模型以允许多个进程可以写入同一个文件-->
          <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
          <file value="LogsLog_" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value="yyyyMMdd'.txt'" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%date %newline%message %newline" />
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Error" />
            <param name="LevelMax" value="Error" />
          </filter>
        </appender>
    
        <root>
          <!--<level value="Error" />-->
          <appender-ref ref="RollingLogFileAppender" />
        </root>
      </log4net>
    </configuration>
    

     下面是LogHelper类中的代码

        public class LogHelper
        {
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
            public static void LoadConfig(string path)
            {
                log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(path));
            }
    
            /// <summary>
            /// 错误信息
            /// </summary
            public static void Error(string error)
            {
                log.Error(error);
            }
    
            /// <summary>
            /// 致命信息
            /// </summary>
            public static void Fatal(string fatal)
            {
                log.Fatal(fatal);
            }
    
            /// <summary>
            /// 一般信息
            /// </summary>
            public static void Info(string info)
            {
                log.Info(info);
            }
    
            /// <summary>
            /// 警告信息
            /// </summary>
            public static void Warn(string warn)
            {
                log.Warn(warn);
            }
        }
  • 相关阅读:
    刨析Maven(对pom.xml配置文件常用标签的解析)
    sublime text 3 使用技巧
    CSS3之渐变
    CSS3之过渡
    定位
    Java中的正则表达式
    CSS3之转换
    CSS布局
    导航条菜单制作总结
    Transition
  • 原文地址:https://www.cnblogs.com/amywechat/p/4898481.html
Copyright © 2011-2022 走看看