Log4Net日志配置

2/11/2016来源:ASP.NET技巧人气:1707

1.添加Log4net.dll引用

将release版Log4net.dll拷贝到Lib文件夹,然后添加引用。

 

2.在Web.Config(或App.Config)添加配置。

 (1)在configSections节点下添加配置:

<!--Log4Net配置-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

 (2)在configuration节点下添加配置:

 <!--log4net配置(专业配置,推荐)-->
  <log4net>
    <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
    <!-- Set root logger level to ERROR and its appenders -->
    <root>
      <level value="WARN"/>
      <appender-ref ref="SysAppender"/>
    </root>

    <!-- PRint only messages of level DEBUG or above in the packages -->
    <logger name="WebLogger">
      <level value="DEBUG"/>
    </logger>

    <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="App_Data/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
        <param name="Header" value="&#13;&#10;----------------------header--------------------------&#13;&#10;" />
        <param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" />
      </layout>
    </appender>
    <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
  </log4net>
  <!--log4net配置结束-->

配置信息说明:

Appender:可以将日志输出到不同的地方,不同的输出模板对应不同的Appender:

RollingFileAppender(滚动文件)、AdoNetAppender(数据库)、SmtpAppender(邮件)等。

 

Level(级别):标识这条日志信息的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于这个Level的日志是不会被写到Appender中的。

 

Log4Net还可以设定多个Appender,可以实现同时将日志记录到文件、数据、发送邮件等;可以设定不同的Appender的Level,可以实现普通级别都记录到文件。Error以上级别发送邮件。可以实现对不同的类设定不同的Appender;还可以自定义Appender,这样可以自己实现将Error信息发短信等。

 

除了Log4Net,还有Enterprise Library中的Logging application Block、Apache的CommonLog以及NLog等,都差不多。

 

最基本简单的配置,不推荐

 <!--log4net配置(最基本简单的配置,不推荐)-->
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="test.txt"/>
      <appendToFile value="true"/> --><!--追加--><!--
      <maxSizeRollBackups value="10"/> --><!--备份数量--><!--
      <maximumFileSize value="1024KB"/>
      <rollingStyle value="Size"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>
  <!--log4net配置结束-->
View Code

 

3.在Global文件Application_Start方法下,程序最开始进行初始化。

using log4net;
using Spring.Web.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using WebApp.Models;

namespace WebApp
{
    // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
    // 请访问 http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : SpringMvcApplication //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);
            log4net.Config.xmlConfigurator.Configure();//读取Log4Net配置信息

            #region 开启线程扫描异队列,处理异常信息
            //string fileLogPath = Server.MapPath("/Log/");//知道用来保存错误日志文件的文件夹路径
            //开启一个线程扫描日志队列
            ThreadPool.UnsafeQueueUserWorkItem((a) =>
            {
                while (true)
                {
                    if (MyExceptionAttribute.exceptionQueue.Count > 0) //判断队列中是否有数据
                    {
                        Exception ex = MyExceptionAttribute.exceptionQueue.Dequeue();//出队
                        if (ex != null)
                        {
                            //string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                            //File.AppendAllText(fileLogPath + fileName, ex.ToString(), Encoding.Default);//将异常追加写入到文件中

                            ILog logger = LogManager.GetLogger("errorMsg");
                            logger.Error(ex); //将异常信息写到磁盘上
                        }
                        else
                        {
                            Thread.Sleep(3000);
                        }
                    }
                    else
                    {
                        Thread.Sleep(3000);//如果队列中没有数据,让当前线程休息3秒钟,避免造成CPU空转,避免CPU的浪费
                    }
                }
            }, null);
            #endregion


        }
    }
}

 

4.测试效果

 

5.源码下载:

点击下载源码>>

点击下载数据库文件>>