zoukankan      html  css  js  c++  java
  • Log4Net不同日志类型写入到不同文件

    1. 一直在用log4net,从来没有自己整理过。实践出真知,只有自己整理过才能真正掌握。

    2. log4net,应该读logfornet,以前一直说log4,log4............ 

    安装

    NuGet:

    AssemblyInfo.cs :

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

    配置 

    log4net.config

    <log4net>
    
      <root>
        <level value="DEBUG" />
        <appender-ref ref="DebugRollingFileAppender" />
        <appender-ref ref="InfoRollingFileAppender" />
        <appender-ref ref="WarnRollingFileAppender" />
        <appender-ref ref="ErrorRollingFileAppender" />
      </root>
      
      <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="Logs/Debug/" />
        <appendToFile value="true" />
        <immediateFlush value="true" />
        <staticLogFileName value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy-MM-dd\yyyy-MM-dd_HH&quot;.log&quot;" />
        <MaximumFileSize value="50MB"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} [%t] %c :%newline %m%n %newline " />
          </layout>
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch  value="DEBUG" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
    
      <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="Logs/Info/" />
        <appendToFile value="true" />
        <immediateFlush value="true" />
        <staticLogFileName value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy-MM-dd\yyyy-MM-dd_HH&quot;.log&quot;" />
        <MaximumFileSize value="50MB"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch  value="INFO" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
    
      <appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="Logs/Warn/" />
        <appendToFile value="true" />
        <immediateFlush value="true" />
        <staticLogFileName value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy-MM-dd\yyyy-MM-dd_HH&quot;.log&quot;" />
        <MaximumFileSize value="50MB"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch  value="WARN" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
    
      <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="Logs/Error/" />
        <appendToFile value="true" />
        <immediateFlush value="true" />
        <staticLogFileName value="false" />
        <rollingStyle value="Date" />
        <datePattern value="yyyy-MM-dd\yyyy-MM-dd_HH&quot;.log&quot;" />
        <MaximumFileSize value="50MB"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch  value="ERROR" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
        
    </log4net>

    客户端

            private ILog _log = log4net.LogManager.GetLogger("LogTestController");
            public ActionResult Index()
            {
                _log.Info("Info");
                _log.Error("Error");
                _log.Debug("Debug");
                _log.Warn("Warn");
    
                return View();
            }

    root 

    1.root元素没有属性,所有logger默认继承它,root是必须配置的。

    2.level元素:只有在这个级别或之上的事件才会被记录

    OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL 】

    3.appender-ref元素:指定一个或多个appender

    appender

    1.定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。

    【一般写文件日志用log4net.Appender.RollingFileAppender,可以根据日期格式或者文件大小来决定是否新建一个log.txt】

    2.file元素:指定日志路径。

    3.appendToFile元素:是否支持分割文件。

    4.rollingStyle元素:【Size:按日志大小,Date:日期格式分割】。

    5.datePattern元素:日期格式。

    6.MaximumFileSize元素:最小日志文件大小。

    7.layout元素:日志输出格式。【log4net.Layout.PatternLayout】。

    8.filter元素:指定级别的日志输出【LevelMatchFilter】

      或者指定一个范围级别的日志输出【LevelRangeFilter】

    PatterLayout的格式化字符串:

    Conversion Pattern NameEffect
    a 等价于appdomain
    appdomain 引发日志事件的应用程序域的友好名称。(我在使用中一般是可执行文件的名字。)
    c 等价于 logger
    C 等价于 type
    class 等价于 type
    d 等价于 date
    date

    发生日志事件的本地时间。 使用 DE<%utcdate 输出UTC时间。date后面还可以跟一个日期格式,用大括号括起来。DE<例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,将使用ISO8601 格式 。

    日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。

    另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %date{ISO8601}%date{ABSOLUTE}

    它们的性能要好于ToString。

    exception

    异常信息

    日志事件中必须存了一个异常对象,如果日志事件不包含没有异常对象,将什么也不输出。异常输出完毕后会跟一个换行。一般会在输出异常前加一个换行,并将异常放在最后。

    F 等价于 file
    file

    发生日志请求的源代码文件的名字。

    警告:只在调试的时候有效。调用本地信息会影响性能。

    identity

    当前活动用户的名字(Principal.Identity.Name).

    警告:会影响性能。(我测试的时候%identity返回都是空的。)

    l 等价于 location
    L 等价于 line
    location

    引发日志事件的方法(包括命名空间和类名),以及所在的源文件和行号。

    警告:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。

    level

    日志事件等级

    line

    引发日志事件的行号

    警告:会影响性能。

    logger

    记录日志事件的Logger对象的名字。

    可以使用精度说明符控制Logger的名字的输出层级,默认输出全名。

    注意,精度符的控制是从右开始的。例如:logger 名为 "a.b.c", 输出模型为 %logger{2} ,将输出"b.c"。

    m 等价于 message
    M 等价于 method
    message

    由应用程序提供给日志事件的消息。

    mdc

    MDC (旧为:ThreadContext.Properties) 现在是事件属性的一部分。 保留它是为了兼容性,它等价于 property

    method

    发生日志请求的方法名(只有方法名而已)。

    警告:会影响性能。

    n 等价于 newline
    newline

    换行符

    ndc

    NDC (nested diagnostic context)

    p 等价于 level
    P 等价于 property
    properties 等价于 property
    property

    输出事件的特殊属性。例如: %property{user} 输出user属性。属性是由loggers或appenders添加到时间中的。 有一个默认的属性"DE<log4net:HostName"总是会有。DE<

    %property将输出所以的属性 。

    (我除了知道可以用它获得主机名外,还不知道怎么用。)

     
    r 等价于 timestamp
    t 等价于 thread
    timestamp

    从程序启动到事件发生所经过的毫秒数。

    thread

    引发日志事件的线程,如果没有线程名就使用线程号。

    type

    引发日志请求的类的全名。.

    可以使用精度控制符。例如: 类名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 将输出"PatternLayout"。(也是从右开始的。)

    警告:会影响性能。

    u 等价于 identity
    username

    当前用户的WindowsIdentity。(类似:HostNameUsername)

    警告:会影响性能。

    utcdate

    发生日志事件的UTC时间。DE<后面还可以跟一个日期格式,用大括号括起来。DE<例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,将使用ISO8601 格式 。

    日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。

    另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %date{ISO8601}%date{ABSOLUTE}

    它们的性能要好于ToString。

    w 等价于 username
    x 等价于 ndc
    X 等价于 mdc
    %

    %%输出一个百分号

    参考文档:

    http://peibing211.blog.163.com/blog/static/37116360200992811595469/


    本文博客园地址:http://www.cnblogs.com/struggle999/p/7111436.html 
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    开启Chrome内核浏览器的多线程下载功能
    golang fasthttp
    国内外短信接码平台合集
    jsrsasign 进行 RSA 加密、解密、签名、验签
    sysbench对自装MySQL数据库进行基准测试
    MySQL慢查询
    Logstash的配置
    简单的MySQL主从状态监控
    aria2c备忘
    DataX 整合后重新编译打包
  • 原文地址:https://www.cnblogs.com/struggle999/p/7111436.html
Copyright © 2011-2022 走看看