• .Net MVC4 log4net的配置


       一、首先在使用log4net记录日志的时候,我们要引用log4net.dll文件

       二、在web.config中添加一下配置代码

     <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />
      </configSections>

    接着添加一下配置代码:

     <!--站点日志配置部分-->
      <log4net>
        <!-- Define some output appenders -->
        <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
        <!-- Set root logger level to ERROR and its appenders -->
        <root>
          <level value="ERROR"/>
          <appender-ref ref="ErrorAppender"/>
        </root>
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="ErrorLogger">
          <level value="ERROR"/>
        </logger>
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net">
          <!--文件保存的地址-->
          <param name="File" value="App_Data/" />
          <!--是否追加-->
          <param name="AppendToFile" value="true"/>
          <!--最大日志文件数量-->
          <param name="MaxSizeRollBackups" value="50"/>
          <!--文件最大值-->
          <param name="MaximumFileSize" value="2MB"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <param name="RollingStyle" value="Composite"/>
          <param name="DatePattern" value="&quot;Logs_Error&quot;yyyyMMdd&quot;.txt&quot;"/>
          <!--是否只写到一个文件中-->
          <param name="StaticLogFileName" value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <!--输出格式-->
            <!--%logger:错误的对象-->
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline%newline"/>
            <param name="Header" value="&#xA;-------------------Error-header-------------------&#xA;&#xA;"/>
            <param name="Footer" value="&#xA;-------------------Error-footer-------------------&#xA;&#xA;"/>
          </layout>
        </appender>
      </log4net>

       三、创建一个记录异常的过滤器Log4ExceptionAttribute继承HandleErrorAttribute

    public static Queue<Exception> Exceptions = new Queue<Exception>();
            /// <summary>
            /// 重写OnException方法来捕获异常数据
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnException(ExceptionContext filterContext)
            {
                base.OnException(filterContext);
                //捕获当前异常数据
                var ex = filterContext.Exception;
                //将异常数据入队
                Exceptions.Enqueue(ex);
                //跳转到错误页面
                filterContext.HttpContext.Response.Redirect("http://www.baidu.com");
            }

       四、在global.asax中添加一下代码

      log4net.Config.XmlConfigurator.Configure();
    //开启一个线程,扫描异常信息队列.
                var filePath = Server.MapPath("/Log/");
                ThreadPool.QueueUserWorkItem((a) =>
                {
                    while (true)
                    {
                        //判断队列中是否有数据
                        if (Log4ExceptionAttribute.Exceptions.Any())
                        {
                            //出队一条异常信息
                            var ex = Log4ExceptionAttribute.Exceptions.Dequeue();
                            //若异常信息不为空
                            if (ex == null) continue;
                            //将异常信息写入到日志文件中
                            var logger = LogManager.GetLogger("ErrorLogger");
                            logger.Error(ex.ToString());
                        }
                        else
                        {
                            //若异常信息队列为空,则线程休息三秒
                            Thread.Sleep(3000);
                        }
                    }
                }, filePath);

        最后找到App_Start下的FilterConfig过滤器把刚创建的异常过滤器添加进去

      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                //filters.Add(new HandleErrorAttribute());
                filters.Add(new Log4ExceptionAttribute());
            }
  • 相关阅读:
    Android&Handler2
    ACM&数字阶梯求和(大数问题)
    Android&MyThread
    【转】 《基于MFC的OpenGL编程》Part 15 Selection
    【转】 《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists
    【转】《基于MFC的OpenGL编程》Part 16 Reflection
    【转】 《基于MFC的OpenGL编程》Part 8 Colors
    【转】 《基于MFC的OpenGL编程》Part 14 Quadrics
    开发不同语言版本的C#程序
    基于ADS40的线阵摄影测量及数据处理
  • 原文地址:https://www.cnblogs.com/longbky/p/8336619.html
Copyright © 2020-2023  润新知