zoukankan      html  css  js  c++  java
  • log4net学习笔记

    一直想找一个好用的日子类,今天偶然的机会看到了log4net这个类库,过来学习一下。

    log4net是.NET框架下的一个日子类库,官网是http://logging.apache.org/log4net/,打开就一股浓浓的Apache 风格扑鼻而来。

    • 下载地址:

    http://apache.fayea.com//logging/log4net/binaries/log4net-1.2.15-bin-newkey.zip

    • 目录结构:

    ├─bin
    │  ├─cli
    │  │  └─1.0
    │  ├─mono
    │  │  ├─1.0
    │  │  ├─2.0
    │  │  ├─3.5
    │  │  └─4.0
    │  ├─net
    │  │  ├─1.0
    │  │  ├─1.1
    │  │  ├─2.0
    │  │  ├─3.5
    │  │  ├─4.0
    │  │  └─4.5
    │  └─net-cp
    │      ├─3.5
    │      └─4.0
    └─doc

    如果是win下的一般使用net文件夹,找到对应的.net版本引用dll即可。

    • 使用方法:主要分为2部分,配置和调用

    配置

    按照官方文档的说明配置可以通过代码和配置文件两种。

    • 配置文件:

    通过配置文件配置一般是使用系统的配置文件,比如WinForm的app.config,Web的web.config,也可以自定义xml文件,但是要通过log4net.Config.XmlConfigurator.Configure(…)手动初始化。

    一个简单的配置文件模板如下:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configsections><section name="log4net" type="System.Configuration.IgnoreSectionHandler">
     <log4net>
       <appender name="X" type="log4net.Appender.X">
          <layout type="log4net.Layout.PatternLayout">
             <conversionpattern value="XX">
          </conversionpattern></layout>
        </appender>
       <root>
          <level value="XXX">
          <appender-ref ref="X">
       </appender-ref></level></root>
    </log4net></section></configsections></configuration>
    • Appender来定制各种日志的存储介质和模板,支持数据库、文件和网络,具体类型有:AdoNet , AnsiColorTerminal , AspNetTrace , BufferingForwarding , ColoredConsole , Console , Debug , EventLog , File , Forwarding , LocalSyslog , ManagedColoredConsole , Memory , NetSend , OutputDebugString , RemoteSyslog , Remoting , RollingFile , Smtp , SmtpPickupDir , Telnet , Trace , Udp。
    • Root节点来定义什么级别使用什么Appender,appender-ref的ref就是之前定制的Appender的name。
    • 其中appender. Layout. conversionPattern的value就是用来定义每一条日志的输出格式的。支持以下但不仅限于宏:(支持首字母缩写)

    %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
    %n(new line):换行
    %d(datetime):输出当前语句运行的时刻
    %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
    %t(thread id):当前语句所在的线程ID
    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
    %c(class):当前日志对象的名称,例如:
    %f(file):输出语句所在的文件名。
    %l(line):输出语句所在的行号。
    %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

    • 来举几个例子吧
    • 控制台输出日志

    (如果是WinForm,这个库是不能自己建立控制台窗体的,可以通过WinAPI的 [DllImport(“kernel32.dll”)]public static extern Boolean AllocConsole(); 先自行创建控制台)

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
         <layout type="log4net.Layout.PatternLayout">
           <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
         </conversionpattern></layout>
    </appender>
    • 控制台-按照不同级别彩色输出
      <appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
           <mapping>
             <level value="ERROR">
             <forecolor value="White">
             <backcolor value="Red">
           </backcolor></forecolor></level></mapping>
           <layout type="log4net.Layout.PatternLayout">
             <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
           </conversionpattern></layout>
      </appender>
    • 普通文件日志
      <appender name="FileAppender" type="log4net.Appender.FileAppender">
           <file value="log-file.txt">
           <appendtofile value="true">
           <layout type="log4net.Layout.PatternLayout">
             <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
           </conversionpattern></layout>
      </appendtofile></file></appender>
    • RollingFileAppender日志(不知道具体怎么翻译,就是可以按照日期分类,按指定文件大小拆分日志,指定最大拆分数量那种)
      <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log\\">
            <appendtofile value="true">
            <datepattern value="yyyy\\MM\\dd'.txt'">
           <staticlogfilename value="false">
            <layout type="log4net.Layout.PatternLayout">
               <conversionpattern value="记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message %n">
            </conversionpattern></layout>
      </staticlogfilename></datepattern></appendtofile></file></appender>
    • 转发日志(按照条件将不同级别的日志转发给不同appender)
      <appender name="ForwardingAppender" type="log4net.Appender. ForwardingAppender">
          <threshold value="WARN">
           <appender-ref ref="RollingFileAppender">
      </appender-ref></threshold>
      </appender>
    • 缓存转发器(不知道效率会不会提高)
      <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
           <buffersize value="100">
           <appender-ref ref="RollingFileAppender">
         </appender-ref></buffersize>
      </appender>
    • 代码:

    通过代码动态配置主要通过这个函数:

    log4net.Config.BasicConfigurator.Configure()

    他有5个重载:

    public static ICollection Configure();
    public static ICollection Configure(IAppender appender);
    public static ICollection Configure(params IAppender[] appenders);
    public static ICollection Configure(ILoggerRepository repository);
    public static ICollection Configure(ILoggerRepository repository, IAppender appender);
    public static ICollection Configure(ILoggerRepository repository, params IAppender[] appenders);

    appender参数应该和签名XML配置差不多。

    1. 调用

    调用很简单啦。现在类里面见一个对象:

    private static readonly ILog log = LogManager.GetLogger(typeof(JSShareObj));

    其中public static ILog GetLogger(Type type)中的参数type会显示在前面模板中的%logger中。

    然后就可以调用log的各种方法了:

    Log.Debug,Log.Error,Log.Fatal,Log.Info,Log.Warn

  • 相关阅读:
    Spring之循环依赖与解决方案
    ipv4+ipv6网络中的DDNS
    NAT、PAT、DMZ、端口映射、端口转发、UPNP
    如何实现内外网或多网络环境下上网?路由route
    局域网学习MAC地址?ping+arp
    网络故障排查?ping和trace*
    有了MAC地址,为什么还要用IP地址?
    Nginx原理解析
    磁盘io
    last总结
  • 原文地址:https://www.cnblogs.com/chihirosan/p/5139111.html
Copyright © 2011-2022 走看看