zoukankan      html  css  js  c++  java
  • log4net.dll配置以及在项目中应用 zt

    1 首先在项目中引用log4net.dll,然后项目中添加一个配置文件log4net.config

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net debug="false">
      <appender name="ApplePushFileAppender"
                type="log4net.Appender.RollingFileAppender">
        <param name="File"
               value="Logs\ApplePush" /><!--日志路径-->
     <param name="AppendToFile" value="true"/><!--日志生成追加在文件中-->
     <param name="DatePattern" value=".yyyyMMdd&quot;.log&quot;" /><!--生成日志文件名称的格式-->
     <param name="RollingStyle" value="Date"/><!--日志重复方式,按照日期重复,每天产生一个日志文件-->
     <param name="StaticLogFileName" value="false"/> 
    
    <layout type="log4net.Layout.PatternLayout"> 
    
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
    
    </layout>
    
     </appender> 
    
    <root> 
    
    <level value="DEBUG" /> 
    
    </root> <logger name="ApplePush"><!--日志名字,需要跟后面代码中的名字一样--> 
    
    <appender-ref ref="ApplePushFileAppender" /> 
    
    </logger> 
    
    </log4net>
    View Code

    2,在项目中的Properties文件夹下的AssemblyInfo.cs中加入一句话

    当然,首先要加入using log4net;;然后添加[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

    WINFORM应用程序

    using log4net.Config; 
    
    ...
    [assembly: log4net.Config.XmlConfigurator()]
    //或 [assembly:log4net.Config.DOMConfigurator()]  
    

     WEBFORM程序

    [assembly:log4net.Config.DOMConfigurator(ConfigFile="web.config",Watch=true)]
    

     在Web.Config或App.Config里配置Log4Net

        首先,在<configuration>下添加入以下配置节(必须是第一个子节点,否则报错)

     <!--log4net -->
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" />
      </configSections>

    3,开始在需要记录日志的地方开始使用

    首先加入using log4net;

    然后定义log全局变量:private static readonly ILog Log = LogManager.GetLogger("ApplePush");//名称与配置文件中的名称一致

    然后可以再用到的地方使用log,比如

    using log4net;
    ...
    private static readonly ILog logger = LogManager.GetLogger("Log4NetTest.LogTest");//名称与配置文件中的名称一致
    ...
    logger.Info("记录日志");
    logger.InfoFormat("推送服务启动.....");
    logger.Warn("警告信息");
    logger.Error("错误信息");  
    

     等等log的方法,使用起来非常方便

    另一种配置log4net的方法,是在单独的XML文件中配置,这个时候,只要把log4net标记中的内容复制过来就行了,不需要configSections

    然后,加入log4net配置内容的定义,范例如下:

    <log4net>
        <root>
          <level value="ALL" /> <!--level定义记录的日志级别,级别由高往低依次是:None Fatal ERROR WARN DEBUG INFO ALL-->
          <appender-ref ref="rollingFile" />
        </root>
    
        <logger name="Log4NetTest.LogTest"> <!--logger是负责日志的记录者-->
          <level value="DEBUG" />
          <appender-ref  ref="rollingFile" /> <!--ref:参照引用-->
          <appender-ref ref="consoleApp" /> 
        </logger>
        
        <appender  name="rollingFile" type="log4net.Appender.RollingFileAppender" ><!--appender提供记录的介质-->
          <param name="File"  value="Logs\ApplePush" /><!--日志路径-->
          <param name="AppendToFile" value="true"/><!--日志生成追加在文件中-->
          <param name="DatePattern" value=".yyyyMMdd&quot;.log&quot;" /> <!--生成日志文件名称的格式-->
          <param name="RollingStyle" value="Date"/> <!--日志重复方式,按照日期重复,每天产生一个日志文件-->
          <param name="StaticLogFileName" value="false"/>
          
          <layout type="log4net.Layout.PatternLayout" ><!--layout负责把记入的内容格式化-->
            <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"    >
          <layout type="log4net.Layout.PatternLayout"   > 
            <param  name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
          </layout>
        </appender>
        
      </log4net>
    View Code

    <log4net>是log4net配置节的根标记。

    <root>标记定义一个根级别的记录者,log4net的记录者采用层级组织的, 两个logger,A的名字叫loggerA,B的名字叫loggerA.B的话,那么B就是A的儿子,B会自动继承A的一些定义,例如LEVEL定 义,appender-ref定义等,root就是总的logger,其余定义的logger都是他的后代,都会继承他的设置,包括ROOT在内的每一个 LOGGER(ROOT也是一个LOGGER,只不过,他是祖先而已,别的方面,跟其他LOGGER一样),都可以定义Level

    <level>定义记录的日志级别,级别由高往低依次是: None Fatal ERROR WARN DEBUG INFO ALL

    级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用 log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处 理非常灵活

    <appender-ref>了,ref是参照的意思

    log4net的架构的四个要素: <logger>   <appender>  < layout>   <filter>

      <logger>是负责日志的记录者  

      <appender>提供记录的介质  

      <layout>负责把记入的内容格式化

      <filter>负责把内容进行筛选

    可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节 logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化

    %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

    %n(new line):换行

    %d(datetime):输出当前语句运行的时刻

    %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

    %t(thread id):当前语句所在的线程ID

    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

    %c(class):当前日志对象的名称,例如:

           模式字符串为:%-10c -%m%n

           代码为:

    ILog log=LogManager.GetLogger(“Exam.Log”);

    log.Debug(“Hello”);

        则输出为下面的形式:

    Exam.Log       - Hello

    %L:输出语句所在的行号

    %F:输出语句所在的文件名

    %-数字:表示该项的最小长度,如果不够,则用空格填充

    例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:

    176 [main] INFO  org.foo.Bar - Located nearest gas station.

  • 相关阅读:
    Java 8 的内存结构
    数据库锁和隔离级别
    MySQL中的where和having
    单例对象线程安全问题
    计算机速成课 第6集:寄存器 & 内存
    多叉树的深度优先和广度优先遍历
    javascript中异步任务的执行顺序
    错误:C2062:意外的类型"unsigned int"问题的排查
    键值类型QMap、QHash等区别
    qt中文不相等问题
  • 原文地址:https://www.cnblogs.com/zeroone/p/3606160.html
Copyright © 2011-2022 走看看