Log4Net 手冊

  首先感慨下,如今的程序員作的工做由於高級語言的生產力,系統框架模式的成熟,開源大牛的貢獻,已經成愈來愈偏向 「面向配置編程」了......html

詳細使用指南見文章:http://blog.csdn.net/zhoufoxcn/article/details/2220533程序員

1.Log4net的結構編程

  1.1 Loggerapp

    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對象。代碼以下所示:less

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

一般來講,咱們會以類(class)的類型(type)爲參數來調用GetLogger(),以便跟蹤咱們正在進行日誌記錄的類。傳遞的類(class)的類型(type)能夠用typeof(Classname)方法來得到,或者能夠用以下的反射方法來得到:flex

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

  1.2 Repositoryspa

    Repository主要用於負責日誌對象組織結構的維護。在log4net的之前版本中,框架僅支持分等級的組織結構(hierarchical organization)。這種等級結構本質上是庫的一個實現,而且定義在log4net.Repository.Hierarchy 名字空間中。要實現一個Repository,須要實現log4net.Repository.ILoggerRepository 接口。可是一般並非直接實現該接口,而是以log4net.Repository.LoggerRepositorySkeleton爲基類繼承。體系庫 (hierarchical repository )則由log4net.Repository.Hierarchy.Hierarchy類實現。.net

若是你是個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="Logs\err.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="Logs\info.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="Logs\debug.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="Logs\perf.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的具體配置的例子,能夠在log4net\doc\manual\example-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

相關文章
相關標籤/搜索