zoukankan      html  css  js  c++  java
  • log4net示例1最简单的回滚文件记录日志程序(时间)

    目标:

          通过使用Log4net框架,创建按日期分类输出日志在文本文件的示例程序。

    需求:

          1 使用log4net框架提供的日志功能,进行系统的日志管理。

          2 每一天的日志用一个对应的日志文本去存储。(日志文本名称按日期进行区别)

    需求分析:

           1 整备log4net.dll组件库  

           2 由于使用的是回滚文件记录日志的方式,所以Appender选择:RollingFileAppender.

     回滚形式:日期。

             日期格式初步定为:yyyyMMdd-HHmmm

    具体实施:

         (1)创建一个控制台c#应用程序

          (2)添加log4net.dll引用

          (3)在项目中添加一个文本文件,文件扩展名改为:log.set,注意:要将此文件的属性设置为:如有较新的则复制

     文件的内容为:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net xmlns="urn:log4net">
      <root xmlns="">
        <level value="ALL" />
        <appender-ref ref="RollingLogFileAppender" />
      </root>
      <appender xmlns="" name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="log\\Log_"/>
        <param name="AppendToFile" value="true"/>
        <param name="StaticLogFileName" value="false"/>
        <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
        <param name="RollingStyle" value="Date"/>
        <layout type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>    <!--关于这里参数设置-->
        </layout>
      </appender>
    </log4net>

    (4)在项目的AssembleInfo.cs文件中添加:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.set", Watch = true)]

            (5)编码

                   a. 在你的Program文件中添加:using:log4net

                   b.在你的Main函数中拷贝下列代码

                ILog log = log4net.LogManager.GetLogger(typeof(Program)); 
                Random random = new Random();
                for (int i = 0; i < 2; i++)
                {
                    //记录错误日志 
                    if (log.IsErrorEnabled)
                        log.Debug("你引起了一个错误,错误ID为:"+random.Next().ToString());


                    //记录严重错误  
                    if(log.IsFatalEnabled)
                        log.Fatal("你引发了一个总结者错误,可能导致系统终止,ID为:"+random.Next().ToString()); 
                    //记录一般信息 
                    if (log.IsInfoEnabled)
                        log.Info("你计划记录一个信息,id为:"+random.Next().ToString());  
                    //记录调试信息  
                    if (log.IsDebugEnabled)
                        log.Debug("调试信息,调试ID为:" + random.Next().ToString());
                    //记录警告信息 
                    if (log.IsWarnEnabled)
                    {
                        log.Warn("警告:警告ID为:" + random.Next().ToString());
                    }
                }

            (6)测试,隔一天运行一次你的控制台应用程序。假设我昨天运行了一次,今天运行了一次。那么在程序的bin\debug目录下就会出现一个log文件夹,文件夹中会出现两个文本文件“Log_20120427.log” 和“Log_20120428”。 打开其中一个文件就可以看到日志记录。

     很想把示例程序上传,无赖csdn太不好使了。后边会提供示例下载链接

             (7)下面是几种常用的回滚日志存储方式,

             (搜集)

    RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.

    下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止

    <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>
    下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

    <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>
    下面的例子综合使用使用日期和文件大小变换日志文件名。

    <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>
    下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
        <!--日志文件名--> 
        <file value="logfile.txt" /> 
        <!--不追加到原文件--> 
        <appendToFile value="false" /> 
        <!--以日志文件大小变换文件名--> 
        <rollingStyle value="Size" /> 
        <!--最大变换数量,-1为不限制--> 
        <maxSizeRollBackups value="-1" /> 
        <!--最大文件大小--> 
        <maximumFileSize value="50GB" /> 
        <layout type="log4net.Layout.PatternLayout"> 
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
        </layout> 
    </appender>
    下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
    CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
    datePattern : DateFormatter日期格式,string类型。
    Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
    FilterHead : 分割符头部。
    ImmediateFlush : 表示是否立即输出到文件,布尔型的。
    LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
    Name : 设置本Appander的名称。
    SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
    Threshold : 设置内容级别的,比如:DEBUG,INFO等等。

    RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.

    下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止

    <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>
    下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

    <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>
    下面的例子综合使用使用日期和文件大小变换日志文件名。

    <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>
    下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名-->
        <file value="logfile.txt" />
        <!--不追加到原文件-->
        <appendToFile value="false" />
        <!--以日志文件大小变换文件名-->
        <rollingStyle value="Size" />
        <!--最大变换数量,-1为不限制-->
        <maxSizeRollBackups value="-1" />
        <!--最大文件大小-->
        <maximumFileSize value="50GB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
    CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
    datePattern : DateFormatter日期格式,string类型。
    Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
    FilterHead : 分割符头部。
    ImmediateFlush : 表示是否立即输出到文件,布尔型的。
    LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
    Name : 设置本Appander的名称。
    SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
    Threshold : 设置内容级别的,比如:DEBUG,INFO等等。

    按时间以纯文本方式输出日志文件示例

    示例程序

  • 相关阅读:
    java基础知识
    谈谈休眠/睡眠/关机和laptop硬件寿命
    常用的git指令查询
    java swing scroll can not work
    不必要的windows服务
    工作分配问题
    回溯算法
    第四章上机实践
    算法第四章作业
    第三章上机实践
  • 原文地址:https://www.cnblogs.com/mymhj/p/2481218.html
Copyright © 2011-2022 走看看