偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#中l(wèi)og4net使用方法(一)

開發(fā) 后端
本文主要介紹log4net使用方法,Log4net是一個(gè)第三方開源組件,它設(shè)計(jì)的主要目的是組合,生成日志信息,同時(shí)將配置保存到各種存儲(chǔ)介質(zhì)或者展現(xiàn)平臺(tái)中。希望對(duì)你有幫助,一起來(lái)看。

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

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

幾乎所有的大型應(yīng)用都會(huì)有自己的用于跟蹤調(diào)試的API。因?yàn)橐坏┏绦虮徊渴鹨院螅筒惶赡茉倮脤iT的調(diào)試工具了。然而一個(gè)管理員可能需要有一套強(qiáng)大的日志系統(tǒng)來(lái)診斷和修復(fù)配置上的問(wèn)題。

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

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

2 Log4net的安裝:

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

3 Log4net的結(jié)構(gòu)

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

(1) Logger接口

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

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

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

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. //以上的每一個(gè)方法都有一個(gè)重載的方法,用來(lái)支持異常處理。  
  9. //每一個(gè)重載方法都如下所示,有一個(gè)異常類型的附加參數(shù)。  
  10. void Debug(object message, Exception ex);  
  11. // ...  
  12. //Boolean 屬性用來(lái)檢查L(zhǎng)ogger的日志級(jí)別  
  13. //(我們馬上會(huì)在后面看到日志級(jí)別)  
  14. bool isDebugEnabled;  
  15. bool isInfoEnabled;  
  16. //… 其他方法對(duì)應(yīng)的Boolean屬性  

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

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

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

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

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

(2)日志的級(jí)別

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

Level有以下幾種取值:

 Logger的日志級(jí)別
表1 Logger的日志級(jí)別

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

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

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

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

對(duì)于***種方法,Info()的級(jí)別等與日志的級(jí)別(INFO),因此日志請(qǐng)求會(huì)被傳遞,我們可以得到輸出結(jié)果”message”。

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

在表1中有兩個(gè)特殊的級(jí)別:ALL和OFF。ALL表示允許所有的日志請(qǐng)求。OFF是拒絕所有的請(qǐng)求。

你也可以顯式地檢查L(zhǎng)ogger對(duì)象的Boolean屬性,如下所示:

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

Repository

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

如果你是個(gè)log4net框架的使用者,而非擴(kuò)展者,那么你幾乎不會(huì)在你的代碼里用到Repository的類。相反的,你需要用到LogManager類來(lái)自動(dòng)管理庫(kù)和日志對(duì)象。

Appender

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

Appender Filters

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

【編輯推薦】

  1. 實(shí)例講述VB.NET使用Log4Net
  2. ASP.NET調(diào)試API之Log4net使用指南
  3. 用C#實(shí)現(xiàn)HTTP協(xié)議下的多線程文件傳輸
  4. 解析C#委托、時(shí)間和Lambda表達(dá)式
  5. C#控件的閃爍問(wèn)題解決方法總結(jié)
責(zé)任編輯:于鐵 來(lái)源: 百度空間
相關(guān)推薦

2011-06-01 16:08:29

log4Net

2009-10-26 19:22:29

VB.NET使用Log

2009-08-24 18:14:35

ASP.NET調(diào)試Log4net

2024-05-21 11:09:17

2009-08-25 16:54:28

C# RichText

2009-08-28 16:31:21

C# treeview

2024-12-04 08:17:49

日志框架NLog

2009-08-28 17:01:43

C#構(gòu)造函數(shù)

2009-09-08 14:54:40

C# listBox控

2024-11-12 07:28:39

2009-09-01 15:25:04

C# default關(guān)

2011-08-02 15:55:31

Objective-C NSAutorele

2011-07-19 17:18:35

Objective-C Property

2023-12-25 08:55:35

.NET日志框架Serilog

2009-07-27 14:13:56

調(diào)用c#方法Java scriptASP.NET

2009-04-28 16:58:43

.NET 4C#VB

2024-03-06 09:24:50

AsyncAwaitC#

2011-08-19 13:51:12

2010-02-02 09:32:32

C++ typedef

2010-01-26 17:35:09

C++棧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)