日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#中l(wèi)og4net使用方法(一)

Log4net是一個第三方開源組件,它設計的主要目的是組合,生成日志信息,同時將配置保存到各種存儲介質或者展現(xiàn)平臺中,在實際項目中,Log4net可以保存系統(tǒng)運行情況,可以在系統(tǒng)出現(xiàn)異常時,根據(jù)保存的日志信息,查看當時系統(tǒng)的狀態(tài)。

網(wǎng)站建設公司,為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及定制網(wǎng)站建設服務,專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對成都廣告制作等多個行業(yè)擁有豐富的網(wǎng)站建設經(jīng)驗的網(wǎng)站建設公司。專業(yè)網(wǎng)站設計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)網(wǎng)站推廣優(yōu)化,H5建站,響應式網(wǎng)站。

1.Log4net的優(yōu)點:

幾乎所有的大型應用都會有自己的用于跟蹤調試的API。因為一旦程序被部署以后,就不太可能再利用專門的調試工具了。然而一個管理員可能需要有一套強大的日志系統(tǒng)來診斷和修復配置上的問題。

經(jīng)驗表明,日志記錄往往是軟件開發(fā)周期中的重要組成部分。它具有以下幾個優(yōu)點:它可以提供應用程序運行時的精確環(huán)境,可供開發(fā)人員盡快找到應用程序中的Bug;一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成并輸出日志信息而無需人工干預。另外,日志信息可以輸出到不同的地方(控制臺,文件等)以備以后研究之用。

Log4net就是為這樣一個目的設計的,用于.NET開發(fā)環(huán)境的日志記錄包。

2 Log4net的安裝:

用戶可以從http://logging.apache.org/log4net/下載log4net的源代碼。解壓軟件包后,在解壓的src目錄下將log4net.sln載入Visual Studio .NET,編譯后可以得到log4net.dll。用戶要在自己的程序里加入日志功能,只需將log4net.dll引入工程即可。

3 Log4net的結構

log4net 有四種主要的組件,分別是Logger(記錄器), Repository(庫), Appender(附著器)以及 Layout(布局).

(1) Logger接口

Logger是應用程序需要交互的主要組件,它用來產(chǎn)生日志消息。產(chǎn)生的日志消息并不直接顯示,還要預先經(jīng)過Layout的格式化處理后才會輸出。

Logger提供了多種方式來記錄一個日志消息,你可以在你的應用程序里創(chuàng)建多個Logger,每個實例化的Logger對象都被log4net框架作為命名實體(named entity)來維護。這意味著為了重用Logger對象,你不必將它在不同的類或對象間傳遞,只需要用它的名字為參數(shù)調用就可以了。log4net框架使用繼承體系,繼承體系類似于.NET中的名字空間。也就是說,如果有兩個logger,分別被定義為a.b.c和a.b,那么我們說a.b是a.b.c的祖先。每一個logger都繼承了祖先的屬性

Log4net框架定義了一個ILog接口,所有的logger類都必須實現(xiàn)這個接口。如果你想實現(xiàn)一個自定義的logger,你必須首先實現(xiàn)這個接口。你可以參考在/extension目錄下的幾個例子。

ILog接口的定義如下:

 
 
 
 
  1. public interface ILog  
  2. {  
  3. void Debug(object message);  
  4. void Info(object message);  
  5. void Warn(object message);  
  6. void Error(object message);  
  7. void Fatal(object message);  
  8. //以上的每一個方法都有一個重載的方法,用來支持異常處理。  
  9. //每一個重載方法都如下所示,有一個異常類型的附加參數(shù)。  
  10. void Debug(object message, Exception ex);  
  11. // ...  
  12. //Boolean 屬性用來檢查Logger的日志級別  
  13. //(我們馬上會在后面看到日志級別)  
  14. bool isDebugEnabled;  
  15. bool isInfoEnabled;  
  16. //… 其他方法對應的Boolean屬性  

Log4net框架定義了一個叫做LogManager的類,用來管理所有的logger對象。它有一個GetLogger()靜態(tài)方法,用我們提供的名字參數(shù)來檢索已經(jīng)存在的Logger對象。如果框架里不存在該Logger對象,它也會為我們創(chuàng)建一個Logger對象。代碼如下所示:

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

通常來說,我們會以類(class)的類型(type)為參數(shù)來調用GetLogger(),以便跟蹤我們正在進行日志記錄的類。傳遞的類(class)的類型(type)可以用typeof(Classname)方法來獲得,或者可以用如下的反射方法來獲得:

 
 
 
 
  1. System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

盡管符號長了一些,但是后者可以用于一些場合,比如獲取調用方法的類(class)的類型(type)。

(2)日志的級別

正如你在ILog的接口中看到的一樣,有五種不同的方法可以跟蹤一個應用程序。事實上,這五種方法是運作在Logger對象設置的不同日志優(yōu)先級別上。這幾種不同的級別是作為常量定義在log4net.spi.Level類中。你可以在程序中使用任何一種方法。但是在***的發(fā)布中你也許不想讓所有的代碼來浪費你的CPU周期,因此,框架提供了7種級別和相應的Boolean屬性來控制日志記錄的類型。

Level有以下幾種取值:

表1 Logger的日志級別

在log4net框架里,通過設置配置文件,每個日志對象都被分配了一個日志優(yōu)先級別。如果沒有給一個日志對象顯式地分配一個級別,那么該對象會試圖從他的祖先繼承一個級別值。

ILog接口的每個方法都有一個預先定義好了的級別值。正如你在表1看到的,ILog的Inof()方法具有INFO級別。同樣的,以此類推,Error()方法具有ERROR級別。當我們使用以上的任何一種方法時,log4net框架會檢查日志對象logger的級別和方法的級別。只有當方法的級別高于日志級別時,日志請求才會被接受并執(zhí)行。

舉例說明,當你創(chuàng)建了一個日志對象,并且把他的級別設置為INFO。于是框架會設置日志的每個Boolean屬性。當你調用相應的日志方法時,框架會檢查相應的Boolean屬性,以決定該方法能不能執(zhí)行。如下的代碼:

 
 
 
 
  1. Logger.Info("message");  
  2. Logger.Debug("message");  
  3. Logger.Warn("message"); 

對于***種方法,Info()的級別等與日志的級別(INFO),因此日志請求會被傳遞,我們可以得到輸出結果”message”。

對于第二種方法,Debug()的級別低于日志對象logger的日志級別(INFO),因此,日志請求被拒絕了,我們得不到任何輸出。同樣的,針對第三行語句,我們可以很容易得出結論。

在表1中有兩個特殊的級別:ALL和OFF。ALL表示允許所有的日志請求。OFF是拒絕所有的請求。

你也可以顯式地檢查Logger對象的Boolean屬性,如下所示:

 
 
 
 
  1. if (logger.IsDebugEnabled)   
  2. {  
  3. Logger.Debug("message");  

Repository

Repository主要用于負責日志對象組織結構的維護。在log4net的以前版本中,框架僅支持分等級的組織結構(hierarchical organization)。這種等級結構本質上是庫的一個實現(xiàn),并且定義在log4net.Repository.Hierarchy 名字空間中。要實現(xiàn)一個Repository,需要實現(xiàn)log4net.Repository.ILoggerRepository 接口。但是通常并不是直接實現(xiàn)該接口,而是以log4net.Repository.LoggerRepositorySkeleton為基類繼承。體系庫(hierarchical repository )則由log4net.Repository.Hierarchy.Hierarchy類實現(xiàn)。

如果你是個log4net框架的使用者,而非擴展者,那么你幾乎不會在你的代碼里用到Repository的類。相反的,你需要用到LogManager類來自動管理庫和日志對象。

Appender

一個好的日志框架應該能夠產(chǎn)生多目的地的輸出。比如說輸出到控制臺或保存到一個日志文件。log4net 能夠很好的滿足這些要求。它使用一個叫做Appender的組件來定義輸出介質。正如名字所示,這些組件把它們附加到Logger日志組件上并將輸出傳遞到輸出流中。你可以把多個Appender組件附加到一個日志對象上。Log4net框架提供了幾個Appender組件。關于log4net提供的Appender組件的完整列表可以在log4net框架的幫助手冊中找到。有了這些現(xiàn)成的Appender組件,一般來說你沒有必要再自己編寫了。但是如果你愿意,可以從log4net.Appender.AppenderSkeleton類繼承

Appender Filters

一個Appender 對象缺省地將所有的日志事件傳遞到輸出流。Appender的過濾器(Appender Filters) 可以按照不同的標準過濾日志事件。在log4net.Filter的名字空間下已經(jīng)有幾個預定義的過濾器。使用這些過濾器,你可以按照日志級別范圍過濾日志事件,或者按照某個特殊的字符串進行過濾。你可以在API的幫助文件中發(fā)現(xiàn)更多關于過濾器的信息。


本文標題:C#中l(wèi)og4net使用方法(一)
網(wǎng)頁URL:http://m.5511xx.com/article/dhseeej.html