zoukankan      html  css  js  c++  java
  • (转)log4net的配置详解

      原文地址:http://blog.csdn.net/pfe_nova/article/details/12225349

    log4net是一款优秀的第三方日志框架,可以很容易的加载到开发项目中(引用log4net的dll,再配置些基本参数即可),帮助程序员把日志信息输出到各种不同的目标,常见的有文本、数据库、windows日志、邮件、内存缓冲区等目标。

            首先需要log4net的dll(源码中dll版本是1.2.10.0),引用到程序中,然后再配置下配置文件App.config,配置文件如下:

      

    <?xml version="1.0"?>  
    <configuration>  
      <configSections>  
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>  
      </configSections>  
      <!--站点日志配置部分-->  
      <log4net>  
        <root>  
          <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->  
          <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->  
          <!--如果没有定义LEVEL的值,则缺省为DEBUG-->  
          <level value="ERROR"/>  
          <appender-ref ref="RollingFileAppender"/>  
        </root>  
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">  
          <!--日志文件名开头-->  
          <file value="c:LogTestLog4net.TXT"/>  
          <!--多线程时采用最小锁定-->  
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>  
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->  
          <datePattern value="(yyyyMMdd)"/>  
          <!--是否追加到文件,默认为true,通常无需设置-->  
          <appendToFile value="true"/>  
          <!--变换的形式为日期,这种情况下每天只有一个日志-->  
          <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->  
          <!--<rollingStyle value="Date"/>-->  
          <!--变换的形式为日志大小-->  
          <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->  
          <RollingStyle value="Size"/>  
          <!--每天记录的日志文件个数,与maximumFileSize配合使用-->  
          <MaxSizeRollBackups value="10"/>  
          <!--每个日志文件的最大大小-->  
          <!--可用的单位:KB|MB|GB-->  
          <!--不要使用小数,否则会一直写入当前日志-->  
          <maximumFileSize value="2MB"/>  
          <!--日志格式-->  
          <layout type="log4net.Layout.PatternLayout">  
            <conversionPattern value="%date [%t]%-5p %c - %m%n"/>  
          </layout>  
        </appender>  
      </log4net>  
    </configuration>  

     c# 代码

    using System;  
    using System.Reflection;  
    using log4net;  
    using log4net.Config;  
    namespace Log4Net1001  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                Console.WriteLine("Begin Run");  
                XmlConfigurator.Configure();  //(启动监视
    
                Type type = MethodBase.GetCurrentMethod().DeclaringType;  
                ILog m_log = LogManager.GetLogger(type);  
                m_log.Debug("这是一个Debug日志");  
                m_log.Info("这是一个Info日志");  
                m_log.Warn("这是一个Warn日志");  
                m_log.Error("这是一个Error日志");  
                m_log.Fatal("这是一个Fatal日志");  
                Console.WriteLine("End");  
                Console.ReadLine();  
            }  
        }  
    } 

    运行结果,在c:LogTestLog4net.TXT文件中写了如下信息:
            2013-10-01 22:35:53,793 [10]ERROR Log4Net1001.Program - 这是一个Error日志
            2013-10-01 22:35:53,802 [10]FATAL Log4Net1001.Program - 这是一个Fatal日志

            其中layout节点的配置说明:
            %m(message):输出的日志消息;
            %n(newline):换行;
            %d(datetime):输出当前语句运行的时刻;
            %r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
            %t(threadid):当前语句所在的线程ID ;
            %p(priority): 日志的当前日志级别;
            %c(class):当前日志对象的名称;
            %L:输出语句所在的行号;
            %F:输出语句所在的文件名; 
            %-10:表示最小长度为10,如果不够,则用空格填充;

            其他开发时遇到的问题
            1.项目的目标框架为.NET Framework 3.5(或者4) Client Profile时会报出下图错误,改成.NET Framework 3.5(或者4) 即可;

             2.当configSections节点没有放在configuration节点下的第一个节点时,编译时不会报警告,但运行时不会记日志。这是因为自定义的节点configSections这个必须放在第一个,这是app.config文件的语法规定;

            3.对于大量记日志的程序,需注意配置RollingStyle值为Composite,且设置MaxSizeRollBackups(每天记录的日志文件个数)和maximumFileSize(每个日志文件的最大大小)。我以前遇过一次日志过大的问题,有一次版本临时发布就改了一个方法而没有经过测试,造成每天记几十G日志的,几天就把服务器磁盘弄满了。

            4.当发现不记日志时,可从两方面调查问题,一是log4net有没有初始化,也就是XmlConfigurator.Configure();二是看level节点的配置是不是正确;

            5.当发现一些设置参数没有起作用时,请检查是不是同一个节点被设置过多次,当被重复设置时,log4net会选择最后一个作为实际的设置。例如设置记录日志的级别设置两次如<level value="ERROR"/><level value="All"/>,则最终会以ALL作为记录日志的级别。

            6.如果是网站项目,须在项目中的AssemblyInfo.cs文件的最后一行中添加:

              [assembly: log4net.Config.DOMConfigurator(ConfigFile = "Web.config", Watch = true)]   
            7. 无论C/S或B/S程序都可以在项目的AssemblyInfo.cs文件里添加以下的语句:

                 [assembly: log4net.Config .XmlConfigurator()]

      其它参考地址:http://www.cnblogs.com/zhangchenliang/p/4546352.html

  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5235337.html
Copyright © 2011-2022 走看看