日誌記錄組件[Log4net]詳細介紹(轉)

因爲工作中有要用到Log記錄,找到一篇不錯的文章,就轉了過來,以備後用。

一 Log4net簡介

Log4net是基於.net開發的一款非常著名的記錄日誌開源組件。他最早是2001年7月由NeoWorks Limited啓動的項目,基本的框架源於另外的一個非常著名的姐妹組件-log4j。Log4net記錄日誌的功能非常強大。它可以將日誌分不同的等級,比不同的樣式,將日誌輸出到不同的媒介。

Log4net可以從http://logging.apache.org/log4net網站下載最新版本。

 

 

二 Log4net核心組成

Log4net主要由五個部分組成,分別爲Logger,Appenders, Filters, Layouts 和Object Renders。

 

一)         Logger(日誌)

 

1. 記錄日誌的分類:

Log4net能夠以多種方式輸出日誌。支持的日誌輸出常用的主要媒介有數據庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制檯,文件,事件日誌(可以用事件查看器查看)和郵件等多種方式。

 

2. 日誌的級別

Log4net支持多種級別的日誌。優先級從高到低依次排列如下:

FATAL > ERROR > WARN > INFO > DEBUG

此外還有ALL(允許所有的日誌請求)和OFF(拒絕所有的日誌請求)這兩種特殊的級別。

 

二)         Appenders

 

Appenders決定日誌輸出的方式。

Appenders必須實現log4net.Appenders.IAppender接口。

 

Log4net目前支持的輸出方式包括:
1 AdoNetAppender
    將日誌記錄到數據庫中。可以採用SQL和存儲過程兩種方式。

2 AnsiColorTerminalAppender
    在ANSI 窗口終端寫下高亮度的日誌事件。

3 AspNetTraceAppender
    能用asp.net中Trace的方式查看記錄的日誌。

4 BufferingForwardingAppender
    在輸出到子Appenders之前先緩存日誌事件。

5 ConsoleAppender
    將日誌輸出到控制檯。

6 EventLogAppender
    將日誌寫到Windows Event Log. 

7 FileAppender
    將日誌寫到文件中。

8 LocalSyslogAppender
    將日誌寫到local syslog service (僅用於UNIX環境下). 
9 MemoryAppender
    將日誌存到內存緩衝區。

10 NetSendAppender
    將日誌輸出到Windows Messenger service.這些日誌信息將在用戶終端的對話框中顯示。

11 RemoteSyslogAppender
    通過UDP網絡協議將日誌寫到Remote syslog service。

12 RemotingAppender
    通過.NET Remoting將日誌寫到遠程接收端。

13 RollingFileAppender
    將日誌以回滾文件的形式寫到文件中。

14 SmtpAppender
    將日誌寫到郵件中。

15 TraceAppender
    將日誌寫到.NET trace 系統。

16 UdpAppender
    將日誌connectionless UDP datagrams的形式送到遠程宿主或以UdpClient的形式廣播。 

 

三)         Filters

 

Appender對象將日誌以缺省的方式傳到輸出流,然後Filter可以按照不同的標準控制日誌的輸出。Filter可以再配置文件中配置。最簡單的形式是在appender中寫明一個Threshold.這樣只有級別大於或等於此Threshold的日誌才被記錄。

Filters必須實現log4net.Filters.IFilter接口。

 

四)         Layouts

 

Layouts控制日誌顯示的格式樣式。日誌的顯示格式如下:

"%timestamp [%thread] %-5level %logger - %message%newline"

Timestamp: 表示程序已經開始執行的時間。 單位[毫秒]。

Thread:執行當前代碼的線程。

Level:日誌的級別。

Logger:日誌相關請求的名稱。

Message: 日誌消息。

 

Layouts還可以控制日誌的輸出樣式,比如以普通形式或以xml等形式輸出。

 

五)         Object Renderers

 

這是很重要的一項,log4net將按照用戶定義的標準輸出日誌消息。

Object Renders必須實現log4net.ObjectRenderer.IObjectRenerer接口。

 

 

三 如何在項目中使用log4net

 

下面有個基於控制檯的demo,舉例描述了log4net怎麼用於輸出日誌。
本例中,日誌將會記錄到文件,控制檯,事件日至和Access數據庫中。

一)主要代碼:

1. 配置文件app.config

 

 1<?xml version="1.0" encoding="utf-8" ?>
 2<configuration>
 3    <!-- Register a section handler for the log4net section -->
 4    <configSections>
 5        <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
 6    </configSections>
 7    <appSettings>
 8        <!-- To enable internal log4net logging specify the following appSettings key -->
 9        <!-- <add key="log4net.Internal.Debug" value="true"/> --></appSettings>
10    <!-- This section contains the log4net configuration settings -->
11    <log4net>
12        <!--定義輸出到文件中-->
13        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
14            <!--定義文件存放位置-->
15            <file value="D:/log-file1.txt" />
16            <!-- Example using environment variables in params -->
17            <!-- <file value="${TMP}/log-file.txt" /> -->
18            <!--<sppendToFile value="true" />-->
19            <!-- An alternate output encoding can be specified -->
20            <!-- <encoding value="unicodeFFFE" /> -->
21            <layout type="log4net.Layout.PatternLayout">
22                <!--每條日誌末尾的文字說明-->
23                <footer value="[Footer]--Test By Ring1981  " />
24                <!--輸出格式-->
25                <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
26            </layout>            
27        </appender>
28        <!--定義輸出到控制檯命令行中-->
29        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">            
30            <layout type="log4net.Layout.PatternLayout">
31                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
32            </layout>
33        </appender>
34        <!--定義輸出到windows事件中-->
35        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
36            <layout type="log4net.Layout.PatternLayout">
37                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
38            </layout>
39        </appender>
40        <!--定義輸出到數據庫中,這裏舉例輸出到Access數據庫中,數據庫爲D盤的access.mdb-->
41        <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
42            <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/access.mdb" />
43            <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
44            <!--定義各個參數-->
45            <parameter>
46                <parameterName value="@log_date" />
47                <dbType value="String" />
48                <size value="255" />
49                <layout type="log4net.Layout.PatternLayout">
50                    <conversionPattern value="%date" />
51                </layout>
52            </parameter>
53            <parameter>
54                <parameterName value="@thread" />
55                <dbType value="String" />
56                <size value="255" />
57                <layout type="log4net.Layout.PatternLayout">
58                    <conversionPattern value="%thread" />
59                </layout>
60            </parameter>
61            <parameter>
62                <parameterName value="@log_level" />
63                <dbType value="String" />
64                <size value="50" />
65                <layout type="log4net.Layout.PatternLayout">
66                    <conversionPattern value="%level" />
67                </layout>
68            </parameter>
69            <parameter>
70                <parameterName value="@logger" />
71                <dbType value="String" />
72                <size value="255" />
73                <layout type="log4net.Layout.PatternLayout">
74                    <conversionPattern value="%logger" />
75                </layout>
76            </parameter>
77            <parameter>
78                <parameterName value="@message" />
79                <dbType value="String" />
80                <size value="1024" />
81                <layout type="log4net.Layout.PatternLayout">
82                    <conversionPattern value="%message" />
83                </layout>
84            </parameter>
85        </appender>
86        <!--定義日誌的輸出媒介,下面定義日誌以四種方式輸出。也可以下面的按照一種類型或其他類型輸出。-->
87        <root>
88            <appender-ref ref="LogFileAppender" />
89            <appender-ref ref="ConsoleAppender" />
90            <appender-ref ref="EventLogAppender" />
91            <appender-ref ref="AdoNetAppender_Access" />
92        </root>
93    </log4net>
94</configuration>
2. LoggingExample.cs

 1// Configure log4net using the .config file
 2[assembly: log4net.Config.XmlConfigurator(Watch=true)]
 3// This will cause log4net to look for a configuration file
 4// called ConsoleApp.exe.config in the application base
 5// directory (i.e. the directory containing ConsoleApp.exe)
 6
 7namespace ConsoleApp
 8{
 9    using System;
10
11    /**//// <summary>
12    /// Example of how to simply configure and use log4net
13    /// </summary>
14    public class LoggingExample
15    {
16        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
17        
18        public static void Main(string[] args)
19        {
20            log.Error("Error Acc");
21            log.Fatal("Fatle Acc");            
22            System.Console.ReadLine();
23            
24        }
25
26    }
27}
28
運行程序,日誌就會以xml中定義的四種媒介形式輸出。 

注:

assembly: log4net.Config.XmlConfigurator(Watch=true)]

這句話非常重要,如果沒有這句話,那麼Log4net就沒有辦法順利的讀取配置文件

源代碼可以從
http://files.cnblogs.com/Ring1981/Log4net%20Test.rar下載。

發佈了95 篇原創文章 · 獲贊 6 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章