zoukankan      html  css  js  c++  java
  • log4net使用总结

    一,log4net是什么

    log4net架构下用于记录日志的开源组件,功能相当完善,免去了我们重复造轮子。我想不管是winform还是web都需要记录日志。

    官网下载地址:http://logging.apache.org/log4net/

    SDK地址:http://logging.apache.org/log4net/release/sdk/index.html

    二,怎样使用

    新建了一个LogHelper类包装了一下,自己使用起来也方便。

    注意这一句[assembly:log4net.Config.XmlConfigurator(Watch=true)]不要忘了,否则读不到配置文件

    ※ xml的配置文件的话,ConfigFile是必须的。[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using log4net;
    
    [assembly:log4net.Config.XmlConfigurator(Watch=true)]
    namespace Cshapr3._0NewFeature
    {
        /// <summary>
        /// Log's Type
        /// </summary>
        public enum LogType
        {
            Debug,
            Info,
            Warning,
            Error,
            Fatal
        }
    
        /// <summary>
        /// Log Output Helper,use log4net
        /// author:wz
        /// </summary>    
        public static class LogHelper
        {
            private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
            /// <summary>
            /// Nomal Information Output
            /// LogType:Info
            /// </summary>
            /// <param name="message">message</param>
            public static void Write(string message)
            {
                WriteInner(LogType.Info, message, null);
            }
    
            /// <summary>
            /// Error Information Output
            /// LogType:Error
            /// </summary>
            /// <param name="message">message</param>
            /// <param name="ex">exception</param>
            public static void Write(string message, Exception ex)
            {
                WriteInner(LogType.Error, message, ex);
            }
    
            /// <summary>
            /// special LogType's Information Output
            /// </summary>
            /// <param name="logType">LogType</param>
            /// <param name="message">message</param>
            /// <param name="ex">ex</param>
            public static void Write(LogType logType, string message, Exception ex)
            {
                WriteInner(logType, message, ex);
            }
    
            private static void WriteInner(LogType logType, string message, Exception ex)
            {
                switch (logType)
                {
                    case LogType.Debug:
                        log.Debug(message, ex);
                        break;
                    case LogType.Info:
                        log.Info(message, ex);
                        break;
                    case LogType.Warning:
                        log.Warn(message, ex);
                        break;
                    case LogType.Error:
                        log.Error(message, ex);
                        break;
                    case LogType.Fatal:
                        log.Fatal(message, ex);
                        break;
    
                }
            }
        }
    }

    配置文件 

    在应用程序配置文件中配置的话,要加入下面的这个section

          <section name ="log4net" type ="System.Configuration.IgnoreSectionHandler"/>
     大多数情况我们都会用RollingFileAppender的记录方式,这个可以实现回滚,log文件满了会新建log1,log2进行记录。

    看看下面的官方举例

    1)按照文件大小分块。满100KB,会记入新的文件,最大10个文件后重新覆盖第一个文件。文件名如:log,log1,log2

    View Code
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="100KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    2)按照时间分块。后缀名带时间格式。如:log20070102

    View Code
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logfile" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyyMMdd-HHmm" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    3)按照时间和大小一起分组。保留每天的前10个1M的log文件。

    View Code
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logfile" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    4)每次程序启动都用一个单独的log,下次启动将上次的备份。

    View Code
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logfile.txt" />
        <appendToFile value="false" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="50GB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    filter过滤级别:

    View Code
        <appender name="RollingFileAppender_Composite" type="log4net.Appender.RollingFileAppender">
          <file value="log_composite.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <datepattern value="yyyyMMddHHmm"/>
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="5KB" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="FATAL"/>
            <param name="LevelMax" value="FATAL"/>
          </filter>
        </appender>


    Appender部分参数的含义:

    file:指定log文件名。如:<file value="log.txt" />
    appendToFile:true表示在文件末尾追加,false:覆盖原有信息。这个应该是程序重新启动后对原log文件的处理方式,而不是指每写一次
    都覆盖。
    rollingStyle:Size表示按大小分块,Date表示按日期分块(这和datePattern指定的格式有极大的关系,如指定为“yyyyMMddHHmm”则没分钟都会生成一个log文件)。Composite表示兼容模式,前面两种模式同时制约有效。
    datePattern:分组文件的日期后缀格式。如指定为“yyyyMMddHHmm”,生成的文件就是:log.txt201206211708。
    maxSizeRollBackups:分块数。如:<maxSizeRollBackups value="10" />最大可以分成10个文件。
    maximumFileSize:每个文件的最大Size。
    staticLogFileName :true代表由file指定的文件名是固定的,也就是每次写入的都是log.txt这个文件。false:表示文件名不是固定的。rollingStyle为Date,Composite,这个属性不要指定。
    conversionPattern:log出力的格式,这其中有很多log4net定义的参数,具体含义如下:
     %thread 线程ID。
     %message或%m 输出的消息内容。
     %date{yyyy/MM/dd HH:mm:ss fff}:日期时间,不指定{}里的内容的话将使用默认格式,精确到毫秒。%d
     %-5level log的级别,-5表示占用5个字符(左)。
     %logger 表示调用log.Info,log.Error的类的全名。
     %property{NDC} 输出NDC里的内容。
     %newline或%n 换行。
     %X{mdcName} 输出MDC里名为“mdcName”的对象的值。

    root:这里定义了要使用的appender,通过appender-ref定义,还可以指定log的输出级别,通过level指定。

    View Code
        <root>
          <!--<level value="WARN" />-->
          <level value="ALL"/>
          <appender-ref ref ="LogFileAppender"/>
          <appender-ref ref ="RollingFileAppender"/>
        </root>

    在App.config中的一个完整配置:

    View Code
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
          <section name ="log4net" type ="System.Configuration.IgnoreSectionHandler"/>
        </configSections>
      <appSettings>
        
      </appSettings>
      <log4net>
    
        <appender name="RollingFileAppender_Size" type="log4net.Appender.RollingFileAppender">
          <file value="log_size.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10KB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
        <appender name="RollingFileAppender_Date" type="log4net.Appender.RollingFileAppender">
          <file value="log_date.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datepattern value="yyyyMMddHHmm"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
        <appender name="RollingFileAppender_Composite" type="log4net.Appender.RollingFileAppender">
          <file value="log_composite.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <datepattern value="yyyyMMddHHmm"/>
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="5KB" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
        <appender name="RollingLogFileAppender_Once" type="log4net.Appender.RollingFileAppender">
          <file value="log_Once.txt" />
          <appendToFile value="false" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="-1" />
          <maximumFileSize value="50GB" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
    
        <root>
          <!--<level value="WARN" />-->
          <level value="ALL"/>
          <appender-ref ref ="RollingFileAppender_Size"/>
          <appender-ref ref ="RollingFileAppender_Date"/>
          <appender-ref ref ="RollingFileAppender_Composite"/>
          <appender-ref ref ="RollingLogFileAppender_Once"/>
        </root>
      </log4net>
    </configuration>

    三,理解配置文件

    1,配置文件最详细的解释无疑是官方文档

    http://logging.apache.org/log4net/release/config-examples.html 

    2,PatternLayout的参数该如何配置,每个参数的意思是什么,往往让我们感到迷惑。

    在这里能找到全部的答案。(官方的当然是最详细的)

    http://logging.apache.org/log4net/release/sdk/log4net.Util.PatternString.html

    http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html

     

  • 相关阅读:
    attr系列保留方法使用
    利用python的标准库hashlib 的md5()生成唯一的id
    【病因】 神经衰弱的几大病因
    群里看到的一个骗子批八字的例子
    i'll make a man out of you
    It's A Good Day To Die
    两天了。照着SVN的界面画的一个界面。
    起一卦,看看我想要的,依然这么倒霉
    倒霉倒霉真倒霉,这一卦起得和上一卦一样
    只要是倒霉,起卦就能看出来
  • 原文地址:https://www.cnblogs.com/xiashengwang/p/2578780.html
Copyright © 2011-2022 走看看