zoukankan      html  css  js  c++  java
  • Log4Net 配置日志按日期和日志级别分类写入

    配置效果图:

    配置代码:

      1 <?xml version="1.0" encoding="utf-8" ?>
      2 <log4net>
      3   <!-- Debug 将日志以回滚文件的形式写到文件中 -->
      4   <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" >
      5     <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
      6     <file value="App_Data\" />
      7     <!-- 日志文件的命名规则 -->
      8     <datePattern value="yyyy-MM-dd/'Debug.log'"/>
      9     <!-- 将日志信息追加到已有的日志文件中-->
     10     <appendToFile value="true" />
     11     <rollingStyle value="Size" />
     12     <maxSizeRollBackups value="100" />
     13     <maximumFileSize value="1MB" />
     14     <!-- 指定按日期切分日志文件 -->
     15     <rollingStyle value="Date"/>
     16     <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
     17     <staticLogFileName value="false" />
     18     <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     19     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     20     <layout type="log4net.Layout.PatternLayout">
     21       <conversionPattern value="%newline%newline【日志时间】: %d  【线程ID】: %thread    %newline【日志级别】: %-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
     22     </layout>
     23     <filter type="log4net.Filter.LevelRangeFilter">
     24       <param name="LevelMin" value="Debug" />
     25       <param name="LevelMax" value="Debug" />
     26     </filter>
     27   </appender>
     28 
     29   <!-- Info 将日志以回滚文件的形式写到文件中 -->
     30   <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" >
     31     <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     32     <file value="App_Data\" />
     33     <!-- 日志文件的命名规则 -->
     34     <datePattern value="yyyy-MM-dd/'Info.log'"/>
     35     <!-- 将日志信息追加到已有的日志文件中-->
     36     <appendToFile value="true" />
     37     <rollingStyle value="Size" />
     38     <maxSizeRollBackups value="100" />
     39     <maximumFileSize value="1MB" />
     40     <!-- 指定按日期切分日志文件 -->
     41     <rollingStyle value="Date"/>
     42     <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
     43     <staticLogFileName value="false" />
     44     <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     45     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     46     <layout type="log4net.Layout.PatternLayout">
     47       <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
     48     </layout>
     49     <filter type="log4net.Filter.LevelRangeFilter">
     50       <param name="LevelMin" value="Info" />
     51       <param name="LevelMax" value="Info" />
     52     </filter>
     53   </appender>
     54 
     55   <!-- WARN 将日志以回滚文件的形式写到文件中 -->
     56   <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" >
     57     <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     58     <file value="App_Data\" />
     59     <!-- 日志文件的命名规则 -->
     60     <datePattern value="yyyy-MM-dd/'Warn.log'"/>
     61     <!-- 将日志信息追加到已有的日志文件中-->
     62     <appendToFile value="true" />
     63     <rollingStyle value="Size" />
     64     <maxSizeRollBackups value="100" />
     65     <maximumFileSize value="1MB" />
     66     <!-- 指定按日期切分日志文件 -->
     67     <rollingStyle value="Date"/>
     68     <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
     69     <staticLogFileName value="false" />
     70     <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     71     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     72     <layout type="log4net.Layout.PatternLayout">
     73       <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
     74     </layout>
     75     <filter type="log4net.Filter.LevelRangeFilter">
     76       <param name="LevelMin" value="Warn" />
     77       <param name="LevelMax" value="Warn" />
     78     </filter>
     79   </appender>
     80 
     81   <!-- Error 将日志以回滚文件的形式写到文件中 -->
     82   <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" >
     83     <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
     84     <file value="App_Data\" />
     85     <!-- 日志文件的命名规则 -->
     86     <datePattern value="yyyy-MM-dd/'Error.log'"/>
     87     <!-- 将日志信息追加到已有的日志文件中-->
     88     <appendToFile value="true" />
     89     <rollingStyle value="Size" />
     90     <maxSizeRollBackups value="100" />
     91     <maximumFileSize value="1MB" />
     92     <!-- 指定按日期切分日志文件 -->
     93     <rollingStyle value="Date"/>
     94     <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
     95     <staticLogFileName value="false" />
     96     <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
     97     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     98     <layout type="log4net.Layout.PatternLayout">
     99       <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
    100     </layout>
    101     <filter type="log4net.Filter.LevelRangeFilter">
    102       <param name="LevelMin" value="Error" />
    103       <param name="LevelMax" value="Error" />
    104     </filter>
    105   </appender>
    106 
    107   <!-- Fatal 将日志以回滚文件的形式写到文件中 -->
    108   <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" >
    109     <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
    110     <file value="App_Data\" />
    111     <!-- 日志文件的命名规则 -->
    112     <datePattern value="yyyy-MM-dd/'Fatal.log'"/>
    113     <!-- 将日志信息追加到已有的日志文件中-->
    114     <appendToFile value="true" />
    115     <rollingStyle value="Size" />
    116     <maxSizeRollBackups value="100" />
    117     <maximumFileSize value="1MB" />
    118     <!-- 指定按日期切分日志文件 -->
    119     <rollingStyle value="Date"/>
    120     <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
    121     <staticLogFileName value="false" />
    122     <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
    123     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    124     <layout type="log4net.Layout.PatternLayout">
    125       <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m%newline" />
    126     </layout>
    127     <filter type="log4net.Filter.LevelRangeFilter">
    128       <param name="LevelMin" value="Fatal" />
    129       <param name="LevelMax" value="Fatal" />
    130     </filter>
    131   </appender>
    132 
    133   <root>
    134     <!--控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
    135     比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
    136     如果没有定义LEVEL的值,则缺省为DEBUG-->
    137     <appender-ref ref="RollingFileDebug" />
    138     <appender-ref ref="RollingFileInfo" />
    139     <appender-ref ref="RollingFileWarn" />
    140     <appender-ref ref="RollingFileError" />
    141     <appender-ref ref="RollingFileFatal" />
    142     <level value="DEBUG" />
    143   </root>
    144   <logger name="NHibernate">
    145     <level value="WARN" />
    146   </logger>
    147 </log4net>
    log4net.config 配置代码

    配置总结:

       log4net主要有Appenders(输出媒介)、Filters(过滤器)、Layouts(布局)、Loggers(日志类别)、Object Renders(渲染器)组成。

      <root>为根节点

      <logger>主要负责日志的记录,它记录的方式有多种,可以是以文件、数据库、控制台、邮件等多处方式;

    继承<root>,logger输出日志时,<root>也输出。示例

        <logger name="loginfo">
             <level value="INFO" />
             <appender-ref ref="InfoAppender" />
        </logger>

      Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性

      <level>为日志等级;由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF;比如定义级别为<level value="INFO"/>,则INFO级别向下的级别,比如DEBUG日志将不会被记录;如果没有定义LEVEL的值,则缺省为DEBUG

      <appender>为输出媒介,常用有AdoNetAppender(输出到数据库),AspNetTraceAppender(输出到ASP.NET日志),ConsoleAppender(输出到console),BufferingForwardingAppender(按信息条数输出到console),ColoredConsoleAppender/ManagedColoredConsoleAppender(根据设定颜色输出到console),EventLogAppender(输出到操作系统应用程序日志),FileAppender(输出到文件),RollingFileAppender(有回收的输出到文件),SmtpAppender(输出到邮件),RemotingAppender(远程输出)

       <filter>过滤器,用来过滤输出源输出的内容,其中包括:

      ·DenyAllFilter 阻止所有的日志事件被记录

      ·LevelMatchFilter 只有指定等级的日志事件才被记录

      ·LevelRangeFilter 日志等级在指定范围内的事件才被记录

    ·  LoggerMatchFilter Logger名称匹配,才记录

      ·PropertyFilter 消息匹配指定的属性值时才被记录

    ·  StringMathFilter 消息匹配指定的字符串才被记录

    示例:

      <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
              <filter type="log4net.Filter.LevelMatchFilter">
                  <levelToMatch value="INFO" />
              </filter>
              <filter type="log4net.Filter.DenyAllFilter" />

       </appender>

    log4net layout ConversionPattern常用符号说明

         %m,%message:输出的日志消息;

         %M,%method:输出调用日志输出的方法名;

         %n,%newline:输出一个回车换行符;

         %d,%date:输出当前语句运行的时刻,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出2015-03-10 14:53:28;也可以%d{ISO8601}输出2015-03-10 14:51:12,220, %d{DATE}输出‘10 Mar 2015 14:51:51,318’, %d{ABSOLUTE}输出14:54:07,943,%d{HH:mm:ss,fff}, %d{dd MM yyyy HH:mm:ss,fff},yyyy年份,MM月份,dd日期,HH小时小时24制,hh小时12小时制,mm分钟,ss秒,fff毫秒(f为秒的精确位数,几个f代表精确到小数点后几位)

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

         %t,%thread:当前语句所在的线程ID ;

         %p(priority),%level: 输出日志的当前日志级别,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG;

         %C(class),%class,%type:输出当前日志对象的名称,%C{1}输出日志调用最后第一个类;

         %c(category), %logger:输出日志信息所属目录类型logger name

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

         %l,%location:输出%F%L%C%M

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

         %a,%appdomain:输出引发日志事件的应用程序域的友好名称

         %x,%ndc : 输出(nested diagnostic context)ndc上下文内容

         %X,%mdc:输出(mapped diagnostic context)mdc上下文内容

         %P,%property: 输出事件的特殊属性。例如: %property{user} 输出user属性

         %[-|.]数字: %10,表示最小长度为10,如果不够,则用空格左侧填充;%-10,表示最小长度为10,如果不够,则用空格右侧填充;%.10,表示最大长度为10;可以与%m等其他格式组合使用,示例%10m,%-10m,%10.10m,%-10.10m

         %%:输出%

    解决占用问题

      最小锁定模式,以允许多个进程可以写入同一个文件 例:

       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

    官方地址:http://logging.apache.org/log4net/

    配置示例:http://logging.apache.org/log4net/release/config-examples.html

  • 相关阅读:
    Ubuntu18.04下使用pip3.8报错subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-ze
    解决报错:ModuleNotFoundError: No module named ‘_sqlite3‘
    shell命令中find的用法
    Ubuntu 中卸载软件
    git使用
    django celery 使用
    Django 学习中遇到的问题
    1
    Mac 下安装brew(文末方法亲测有效)
    经典类与新式类的继承顺序
  • 原文地址:https://www.cnblogs.com/Jinfeng1213/p/11281660.html
Copyright © 2011-2022 走看看