.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());
        }
原文地址:https://www.cnblogs.com/longbky/p/8336619.html