zoukankan      html  css  js  c++  java
  • Log4net使用(一)

    转自:http://blog.csdn.net/much0726/article/details/3725563

    转自:https://q.cnblogs.com/q/52302/

    log4net,既要按日期分割日志文件,又要按文件大小分割。

    --------------------------------------------------------------------

    按照日期来分割日志的配置是这样:

    <!--按日期分割日志文件 一天一个-->
    <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
    <!--是否续写-->
    <param name="AppendToFile" value="true" />
    <!--最小锁定模型以允许多个进程可以写入同一个文件-->
    <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
    <param name="StaticLogFileName" value="true" />
    <!--保存路径-->
    <param name="File" value="C:Log\" />
    <param name="DatePattern" value="yyyy-MM-dd.LOG" />
    <param name="StaticLogFileName" value="false" />
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
    </layout>
    </appender>

    按日志容量分割日志文件的配置是这样:

    <!--按日志容量分割日志文件 10KB一个-->
    <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
    <!--是否续写-->
    <param name="AppendToFile" value="true" />
    <!--最小锁定模型以允许多个进程可以写入同一个文件-->
    <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
    <param name="StaticLogFileName" value="true" />
    <!--按照文件的大小进行变换日志文件-->
    <param name="RollingStyle" value="Size" />
    <param name="File" value="LogData\log.txt" />
    <!--单个文件最大数量 好像只有在 RollingStyle=Size分割时有效-->
    <param name="MaximumFileSize" value="20KB"/>
    <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效-->
    <param name="MaxSizeRollBackups" value="2" />
    <param name="StaticLogFileName" value="false" />
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
    </layout>
    </appender>

    但是,我需求是,按照日期来写日志,并且每天当中,还要按照文件大小分割日志。

    比如:

    2013-7-15.txt

    2013-7-15.txt.1

    2013-7-15.txt.2

    2013-7-15.txt.3

    每个日志大小都不大于1000KB。

    怎么还要加哪些属性?

    -------------------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />
    </configSections>   
       <log4net>
         <!--配置日志的级别,低于此级别的就不写到日志里面去
           OFF、FATAL、ERROR, WARN, INFO, DEBUG, ALL
           -->
         <root>
           <level value="DEBUG" />
           <appender-ref ref="LogFileAppender" />
           <appender-ref ref="ConsoleAppender" />
         </root>
         
         <logger name="WebLogger">
           <level value="ERROR" />
         </logger>
     
         <!--输出到文件-->
         <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
           <param name="File" value="Log/" />
           <param name="AppendToFile" value="true" />
           <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
           <param name="MaxSizeRollBackups" value="-1"/>
           <!-- 每个文件的大小限制  -->
           <param name="MaximumFileSize" value="10MB"/>
           <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
           <param name="RollingStyle" value="Composite" />
           <param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />
           <param name="StaticLogFileName" value="false" />
           <layout type="log4net.Layout.PatternLayout,log4net">
             <param name="Header" value="
    ----------------------application startup--------------------------
    " />
             <param name="Footer" value="
     ----------------------application shutdown--------------------------
    " />
             <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line)  %m%n" />
           </layout>
     
           <filter type="log4net.Filter.LevelRangeFilter">
             <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="OFF" />
           </filter>
         </appender>
         <!--输出控制台-->
         <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">
           <layout type="log4net.Layout.PatternLayout,log4net">
             <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line) %m%n" />
           </layout>
         </appender>
       </log4net>
    </configuration>
    

    ------------------------------------------------------

    [C#]Log4net中的RollingFileAppender解析

    ------------------------------------------------------

    Log4日志组件的应用确实简单实用,在比较了企业库和Log4的日志功能后,个人觉得Log4的功能更加强大点.补充说明下,我使用的企业库是2.0版本,Log4net是1.2.1版本的.

    在Log4net的应用上,已经有人做了说明分析了,在本文中,主要解析下Log4net中的RollingFileAppender的应用.

    主要参考了Log4net的帮助文档.在项目中的log4net-1.2.10/doc文件下有.


    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" />

    <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等等。

    在Log4net的配置中有两种方法是等价的:
    <param name="File" value="log.txt" /> 和
    <File value="log.txt" />
    个人更倾向后者。在一些数据库上的应用时还有许多Param呢。 

    小结
    Log4的应用远不止这些,帮助文件也是很详尽的,在程序级还是配置级都有相关例子。在整理了一个RollingFileAppender就花了我不少工夫。如果有机会接触到其他的内容,我会继续整理出来。

  • 相关阅读:
    SpringBoot整合flyway
    JavaFTP递归查询指定目录下的所有目录和文件
    初识网络设备
    Session
    Cookie
    文件下载
    PHP文件上传
    数据库操作函数笔记
    Apache #Tomcat CVE-2020-9484
    红方人员实战手册
  • 原文地址:https://www.cnblogs.com/herizai/p/7109836.html
Copyright © 2011-2022 走看看