天天看點

在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋

在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋
在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋

先不分析上面這段配置資訊是什麼意思。我們先來回想一下我們的日志類通常用來做什麼,假設我們有一個庫存管理系統,分為兩大子產品,一個是出庫,一個是入庫。我們可能想要出庫的相關資訊儲存在某一個檔案夾裡面,入庫的資訊存在另一個檔案夾裡面。這樣,我們通常的做法是用在日志類中不同的路徑将日志寫到不同位置,但是如果我們不單單想要寫到日志檔案中,而且想要将這些日志檔案插入資料庫呢?一般來講,我們會再建立一些方法,來寫到資料庫。另外,正常日志資訊和錯誤日志資訊的布局,我們可能想要根據日志類型的不同,改變資訊的布局,比如錯誤日志裡面有異常資訊的記錄,正常日志裡面就沒有異常的記錄。

      總結地說,我們的日志類的需求通常就是:1、能夠按要求将日志寫到不同的媒體上(檔案、資料庫、郵件等);2、能夠根據日志類型的不同,寫到不同的位置;3、能根據資訊的類型,改變日志的布局。

      不得不說,想要寫好一個日志記錄類還是挺不容易的的,看是簡單的需求要做好,也是需要下大工夫的。而這些在log4net中,隻需要經過一些配置,就可以完成。如果你懶得寫配置資訊,也可以直接将上面的配置資訊拷過去用。

logger是負責日志的記錄者,假設我們需要記錄一些正常的運作時日志和出現異常時的錯誤日志,那麼我們可以通過在配置檔案當中添加兩個logger實作。 

appender提供記錄的媒體,前面談到,我們可能要同時将資料記錄到檔案和資料庫中,我們可以簡單地通過編寫appender實作,而且log4net當中已經預設提供了一些常用的appender,我們可以簡單地修改一些配置檔案就實作同時向資料庫和同時向檔案中寫入的功能。

layout負責把記入的内容格式化。其實就是決定日志檔案要長什麼樣子。

以錯誤日志類為例進行解釋

level定義記錄的日志級别,就是說,你要記錄哪個級别以上的日志,級别由高往低依次是:

none

fatal

error

warn

debug

info

all

級别的定義要注意,如果你定義debug,那麼低于debug級别以下的資訊,将不會記入日志,啥意思呢?就是說,就算你在程式裡,用log.info()來寫入一個日志資訊,可是你在配置中指定level為debug,由于info級别低于debug,是以,不會被記入日志.這樣的處理非常靈活

appender-ref定義日志要寫入到什麼媒體中中。上面例子中就是寫入到errorappender這個媒體中,在errorappender節點我們可以定義跟日志有關的要寫入到什麼地方,日志檔案的格式是什麼等資訊。

以errorappender為例

在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋
在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋

appender節點中,type=rollingfileappender 的意思是将日志以復原檔案的形式寫到檔案中。

file節點中規定了檔案要寫入到什麼目錄中,上例中的“log\\logerror\\”代表寫入到“程式輸入目錄(debug目錄)\log\logerror\”檔案夾中。

appendtofile節點規定了是否覆寫到檔案中。假設我們已經有了一個20131028.htm日志檔案,當為true的時候,日志檔案會附加到這個檔案上。為false的時候,log4net會先将原來的日志檔案備份,生成一個新的日志檔案(見下圖)。

在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋

maxfilesize 最大的檔案大小。我們可以使用"kb", "mb" 或 "gb"為 maxfilesize 作為字尾限定大小。預設的檔案大小是10mb。

rollingstyle是檔案建立的方式。上例中市設定為以date方式建立新檔案。

datepattern 日期格式,當我們設定了rollingstyle 為date方式後,log4net會自動使用datepattern 中的日期格式來建立新的日志檔案。

maxsizerollbackups這個屬性用來設定,當日志檔案達到maxfilesize大小,就自動建立備份檔案。備份檔案的多少由maxsizerollbackups決定。比如說,我們是以日期格式作為日志檔案名的,假設今天是2013-10-28,那麼今天建立的日志檔案名就是20131028.htm,當這個檔案中要超過maxfilesize的時候,log4net就自動将老的20131028.htm改名為20131028.htm.1,并建立一個新的20131028.htm檔案。

staticlogfilename 是否采用靜态檔案名。因為我們這個例子是采用以日期作為檔案名,每天的日志檔案的名字都是動态的,是以上例中為false。如果采用靜态檔案名,那麼日志檔案的名字就是唯一确定的。可以參考下面的配置檔案進行設定。下面的配置檔案中就是采用靜态檔案名,生成的日志檔案名都是log.txt。

在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋
在C#代碼中應用Log4Net(三)Log4Net中配置檔案的解釋

%m[%message]

輸出的日志消息

%n

換行

%d[%datetime]

輸出目前語句運作的時刻

%r

輸出程式從運作到執行到目前語句時消耗的毫秒數

%d

目前語句所在的線程id

%p

日志的目前優先級别

%c

目前日志對象的名稱

%l

輸出語句所在的行号

%f

輸出語句所在的檔案名

%-數字

表示該項的最小長度,如果不夠,則用空格填充

<a href="http://www.cnblogs.com/heroman/archive/2006/01/09/314053.html">log4net五步走</a>

<a href="http://logging.apache.org/log4net/release/config-examples.html" target="_blank">apache log4net™ config examples</a>

<a href="http://logging.apache.org/log4net/release/sdk/index.html" target="_blank">apache log4net� sdk documentation</a>

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

轉載:http://www.cnblogs.com/kissazi2/p/3392605.html