zoukankan      html  css  js  c++  java
  • Log4Net 手册

      首先感慨下,现在的程序员做的工作因为高级语言的生产力,系统框架模式的成熟,开源大牛的贡献,已经成越来越偏向 “面向配置编程”了......

    详细使用指南见文章:http://blog.csdn.net/zhoufoxcn/article/details/2220533

    1.Log4net的结构

      1.1 Logger

        Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。Log4net框架定义了一个ILog接口,所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger,你必须首先实现这个接口,ILog定义如下:

    public interface ILog 
    
    { 
    
      void Debug(object message); 
    
      void Info(object message); 
    
      void Warn(object message); 
    
      void Error(object message); 
    
      void Fatal(object message); 
    
      //以上的每一个方法都有一个重载的方法,用来支持异常处理。 
    
     //每一个重载方法都如下所示,有一个异常类型的附加参数。 
    
      void Debug(object message, Exception ex); 
    
      // ... 
    
      //Boolean 属性用来检查Logger的日志级别 
    
      //(我们马上会在后面看到日志级别) 
    
      bool isDebugEnabled; 
    
      bool isInfoEnabled; 
    
      //… 其他方法对应的Boolean属性 
    
    } 

        Log4net框架定义了一个叫做LogManager的类,用来管理所有的logger对象。它有一个GetLogger()静态方法,用我们提供的名字参数来检索已经存在的Logger对象。如果框架里不存在该Logger对象,它也会为我们创建一个Logger对象。代码如下所示:

    log4net.ILog log = log4net.LogManager.GetLogger("logger-name"); 

    通常来说,我们会以类(class)的类型(type)为参数来调用GetLogger(),以便跟踪我们正在进行日志记录的类。传递的类(class)的类型(type)可以用typeof(Classname)方法来获得,或者可以用如下的反射方法来获得:

    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

      1.2 Repository

        Repository主要用于负责日志对象组织结构的维护。在log4net的以前版本中,框架仅支持分等级的组织结构(hierarchical organization)。这种等级结构本质上是库的一个实现,并且定义在log4net.Repository.Hierarchy 名字空间中。要实现一个Repository,需要实现log4net.Repository.ILoggerRepository 接口。但是通常并不是直接实现该接口,而是以log4net.Repository.LoggerRepositorySkeleton为基类继承。体系库 (hierarchical repository )则由log4net.Repository.Hierarchy.Hierarchy类实现。

    如果你是个log4net框架的使用者,而非扩展者,那么你几乎不会在你的代码里用到Repository的类。相反的,你需要用到LogManager类来自动管理库和日志对象。

      1.3 Appender

        一个好的日志框架应该能够产生多目的地的输出。比如说输出到控制台或保存到一个日志文件。log4net 能够很好的满足这些要求。它使用一个叫做Appender的组件来定义输出介质。正如名字所示,这些组件把它们附加到Logger日志组件上并将输出传递到输出流中。你可以把多个Appender组件附加到一个日志对象上。 Log4net框架提供了几个Appender组件。关于log4net提供的Appender组件的完整列表可以在log4net框架的帮助手册中找到。有了这些现成的Appender组件,一般来说你没有必要再自己编写了。但是如果你愿意,可以从log4net.Appender.AppenderSkeleton类继承。 

      1.4 Appender Filters

        一个Appender 对象缺省地将所有的日志事件传递到输出流。Appender的过滤器(Appender Filters) 可以按照不同的标准过滤日志事件。在log4net.Filter的名字空间下已经有几个预定义的过滤器。使用这些过滤器,你可以按照日志级别范围过滤日志事件,或者按照某个特殊的字符串进行过滤。你可以在API的帮助文件中发现更多关于过滤器的信息。

      1.5 Layout

        一个Appender 对象缺省地将所有的日志事件传递到输出流。Appender的过滤器(Appender Filters) 可以按照不同的标准过滤日志事件。在log4net.Filter的名字空间下已经有几个预定义的过滤器。使用这些过滤器,你可以按照日志级别范围过滤日志事件,或者按照某个特殊的字符串进行过滤。你可以在API的帮助文件中发现更多关于过滤器的信息。

    2.使用配置文件

      log4net框架会在相对于AppDomain.CurrentDomain.BaseDirectory 属性定义的目录路径下查找配置文件。框架在配置文件里要查找的唯一标识是<log4net>标签。一个完整的配置文件的例子如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"></section>
        </configSections>
        <log4net>
        <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
            <filter type="log4net.Filter.LevelMatchFilter">
                <levelToMatch value="ERROR" />
            </filter>
            <filter type="log4net.Filter.DenyAllFilter" />
            <File value="Logserr.log" />
            <PreserveLogFileNameExtension value="true" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
            <filter type="log4net.Filter.LevelMatchFilter">
                <levelToMatch value="INFO" />
            </filter>
            <filter type="log4net.Filter.DenyAllFilter" />
            <File value="Logsinfo.log" />
            <PreserveLogFileNameExtension value="true" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
            <filter type="log4net.Filter.LevelMatchFilter">
                <levelToMatch value="DEBUG" />
            </filter>
            <filter type="log4net.Filter.DenyAllFilter" />
            <File value="Logsdebug.log" />
            <PreserveLogFileNameExtension value="true" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="perfAppender" type="log4net.Appender.RollingFileAppender">
            <filter type="log4net.Filter.LevelMatchFilter">
                <levelToMatch value="INFO" />
            </filter>
            <filter type="log4net.Filter.DenyAllFilter" />
            <File value="Logsperf.log" />
            <PreserveLogFileNameExtension value="true" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date %logger - %message%newline" />
            </layout>
        </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="errorAppender" />
            <appender-ref ref="infoAppender" />
            <appender-ref ref="debugAppender" />
        </root>
        <logger name="Performance" additivity="false">
          <level value="ALL" />
          <appender-ref ref="perfAppender" />
        </logger>
    </log4net>
    </configuration> 


    配置解析:

    Appenders

    <appender>标签的基本形式如上面所示。它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其他标签。

    The following appender type are defined in the log4net package:                   

                                        Type                                    Description
    log4net.Appender.AdoNetAppender                                     Writes logging events to a database using either prepared statements or stored                                     procedures.                               
    log4net.Appender.AnsiColorTerminalAppender                                     Writes color highlighted logging events to a an ANSI terminal window.                               
    log4net.Appender.AspNetTraceAppender                                     Writes logging events to the ASP trace context. These can then be rendered at                                     the end of the ASP page or on the ASP trace page.                               
    log4net.Appender.BufferingForwardingAppender                                     Buffers logging events before forwarding them to child appenders.                               
    log4net.Appender.ColoredConsoleAppender                                     Writes logging events to the application's Console. The events may go to either                                     the standard our stream or the standard error stream. The events may have configurable                                    text and background colors defined for each level.                               
    log4net.Appender.ConsoleAppender                                     Writes logging events to the application's Console. The events may go to either                                     the standard our stream or the standard error stream.                               
    log4net.Appender.DebugAppender                                 Writes logging events to the .NET  system.                             
    log4net.Appender.EventLogAppender                                     Writes logging events to the Windows Event Log.                               
    log4net.Appender.FileAppender                                     Writes logging events to a file in the file system.                               
    log4net.Appender.ForwardingAppender                                     Forwards logging events to child appenders.                               
    log4net.Appender.LocalSyslogAppender                                     Writes logging events to the local syslog service (UNIX only).                               
    log4net.Appender.MemoryAppender                                     Stores logging events in an in memory buffer.                               
    log4net.Appender.NetSendAppender                                     Writes logging events to the Windows Messenger service. These messages are                                     displayed in a dialog on a users terminal.                               
    log4net.Appender.OutputDebugStringAppender                                     Writes logging events to the debugger. If the application has no                                     debugger, the system debugger displays the string. If the application has no                                     debugger and the system debugger is not active, the message is ignored.                               
    log4net.Appender.RemoteSyslogAppender                                     Writes logging events to a remote syslog service using UDP networking.                               
    log4net.Appender.RemotingAppender                                     Writes logging events to a remoting sink using .NET remoting.                               
    log4net.Appender.RollingFileAppender                                     Writes logging events to a file in the file system. The RollingFileAppender can                                     be configured to log to multiple files based upon date or file size                                     constraints.                               
    log4net.Appender.SmtpAppender                                     Sends logging events to an email address.                               
    log4net.Appender.SmtpPickupDirAppender                                     Writes SMTP messages as files into a pickup directory.                                    These files can then be read and sent by an SMTP agent                                    such as the IIS SMTP agent.                               
    log4net.Appender.TelnetAppender                                     Clients connect via Telnet to receive logging events.                               
    log4net.Appender.TraceAppender                                     Writes logging events to the .NET trace system.                               
    log4net.Appender.UdpAppender                                     Sends logging events as connectionless UDP datagrams to a remote host or a                                     multicast group using a UdpClient.

    有关每种appender的具体配置的例子,可以在log4netdocmanualexample-config-appender.html中得到。

    Appender元素里的<filter>标签

    The following filter type are defined in the log4net package:                   

                                        Type                                    Description
    log4net.Filter.DenyAllFilter                                     Drops all logging events.                               
    log4net.Filter.LevelMatchFilter                                     An exact match to the event's level.                               
    log4net.Filter.LevelRangeFilter                                     Matches against a range of levels.                               
    log4net.Filter.LoggerMatchFilter                                     Matches against a the start of the logger name.                               
    log4net.Filter.PropertyFilter                                     Matches a substring from a specific property value.                               
    log4net.Filter.StringMatchFilter                                     Matches a substring from the event's message.                               

    The filters can be configured to either accept or reject the event based upon the match.

    Appender元素里的<Layouts>标签

    The following layouts are included in the log4net package:                  

                                        Type                                    Description
    log4net.Layout.ExceptionLayout                                     Renders the exception text from the logging                                     event.                              
    log4net.Layout.PatternLayout                                     Formats the logging event according to a flexible                                     set of formatting flags.                              
    log4net.Layout.RawTimeStampLayout                                     Extracts the timestamp from the logging event.                              
    log4net.Layout.RawUtcTimeStampLayout                                     Extracts the timestamp from the logging event in Universal Time.                              
    log4net.Layout.SimpleLayout                                     Formats the logging event very simply:                                    [level] - [message]
    log4net.Layout.XmlLayout                                     Formats the logging event as an XML element.                              
    log4net.Layout.XmlLayoutSchemaLog4j                                     Formats the logging event as an XML element that                                    complies with the log4j event dtd.

    这里了解下:log4net.Layout.PatternLayout中的转换模式(ConversionPattern)

    %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

    %n(new line):换行

    %d(datetime):输出当前语句运行的时刻

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

    %t(thread id):当前语句所在的线程ID

    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

    %c(class):当前日志对象的名称,例如:

           模式字符串为:%-10c -%m%n

           代码为:

    ILog log=LogManager.GetLogger(“Exam.Log”);

    log.Debug(“Hello”);

        则输出为下面的形式:

    Exam.Log       - Hello

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

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

    %-数字:表示该项的最小长度,如果不够,则用空格填充

    例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:

    176 [main] INFO  org.foo.Bar - Located nearest gas station.


    全文借鉴:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html

  • 相关阅读:
    云小课 | 华为云KYON之VPC终端节点
    华为云专家向宇:工欲善其事必先利其器,才能做数据的“管家”
    NB-IoT四大关键特性及实现告诉你,为啥NB
    Base64 原理
    netty系列之:轻轻松松搭个支持中文的服务器
    轻松让你的nginx服务器支持HTTP2协议
    是的你没看错,HTTP3来了
    HTTP协议之:HTTP/1.1和HTTP/2
    netty系列之:在netty中使用protobuf协议
    protocol buffer的高效编码方式
  • 原文地址:https://www.cnblogs.com/xiepeixing/p/3259444.html
Copyright © 2011-2022 走看看