log4net(Log For Net)是Apache開源的應用於.Net框架的日志記錄工具,詳細信息參見Apache網站.它是針對Java的log4j(Log For Java的)姊妹工具.用過log4j的都知道,它功能強大,可配置性靈活,線程安全,對日志的輸出管理和級別管理方便。具體的使用方法往下看。
首先你應該下載log4net.dll並引入到你的項目References中,或者把源代碼項目作為你工程的一部分加入到你的工程當中。單擊這裡下載Log4net 。
使用log4net需要知道其中兩個比較重要的概念:logger 和 appender。前者是日志記錄對象,後者是日志記錄的目標,包括控制台,文件,定量大小的文件,遠程廣播。也就是說我們使用log4net的過程可以是這樣的:獲得一個用來記錄日志的工具對象logger,然後為logger對象指定日志的記錄位置.美妙的是,這一切工作都可以在Web.config配置文件中完成,所用的代碼極少。
幾乎所有的大型應用都會有自己的用於跟蹤調試的API。因為一旦程序被部署以後,就不太可能再利用專門的調試工具了。然而一個管理員可能需要有一套強大的日志系統來診斷和修復配置上的問題。
經驗表明,日志記錄往往是軟件開發周期中的重要組成部分。它具有以下幾個優點:它可以提供應用程序運行時的精確環境,可供開發人員盡快找到應用程序中的Bug;一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成並輸出日志信息而無需人工干預。另外,日志信息可以輸出到不同的地方(控制台,文件等)以備以後研究之用。
Log4net就是為這樣一個目的設計的,用於.NET開發環境的日志記錄包。
用戶要在自己的程序裡加入日志功能,只需將log4net.dll引入工程即可。
log4net 有四種主要的組件,分別是Logger(記錄器), Repository(庫), Appender(附著器)以及 Layout(布局)。
Logger是應用程序需要交互的主要組件,它用來產生日志消息。產生的日志消息並不直接顯示,還要預先經過Layout的格式化處理後才會輸出。
Logger提供了多種方式來記錄一個日志消息,你可以在你的應用程序裡創建多個Logger,每個實例化的Logger對象都被log4net框架作為命名實體(named entity)來維護。這意味著為了重用Logger對象,你不必將它在不同的類或對象間傳遞,只需要用它的名字為參數調用就可以了。log4net框架使用繼承體系,繼承體系類似於.NET中的名字空間。也就是說,如果有兩個logger,分別被定義為a.b.c和a.b,那麼我們說a.b是a.b.c的祖先。每一個logger都繼承了祖先的屬性
Log4net框架定義了一個ILog接口,所有的logger類都必須實現這個接口。如果你想實現一個自定義的logger,你必須首先實現這個接口。你可以參考在/extension目錄下的幾個例子。
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
盡管符號長了一些,但是後者可以用於一些場合,比如獲取調用方法的類(class)的類型(type)。
正如你在ILog的接口中看到的一樣,有五種不同的方法可以跟蹤一個應用程序。事實上,這五種方法是運作在Logger對象設置的不同日志優先級別上。這幾種不同的級別是作為常量定義在log4net.spi.Level類中。你可以在程序中使用任何一種方法。但是在最後的發布中你也許不想讓所有的代碼來浪費你的CPU周期,因此,框架提供了7種級別和相應的Boolean屬性來控制日志記錄的類型。