log4net使用手冊(cè)_第1頁(yè)
log4net使用手冊(cè)_第2頁(yè)
log4net使用手冊(cè)_第3頁(yè)
log4net使用手冊(cè)_第4頁(yè)
log4net使用手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、log4net使用手冊(cè)1 簡(jiǎn)介 1.1Log4net的優(yōu)點(diǎn): 幾乎所有的大型應(yīng)用都會(huì)有自己的用于跟蹤調(diào)試的API。因?yàn)橐坏┏绦虮徊渴鹨院?,就不太可能再利用?zhuān)門(mén)的調(diào)試工具了。然而一個(gè)管理員可能需要有一套強(qiáng)大的日志系統(tǒng)來(lái)診斷和修復(fù)配置上的問(wèn)題。 經(jīng)驗(yàn)表明,日志記錄往往是軟件開(kāi)發(fā)周期中的重要組成部分。它具有以下幾個(gè)優(yōu)點(diǎn):它可以提供應(yīng)用程序運(yùn)行時(shí)的精確環(huán)境,可供開(kāi)發(fā)人員盡快找到應(yīng)用程序中的Bug;一旦在程序中加入了Log 輸出代碼,程序運(yùn)行過(guò)程中就能生成并輸出日志信息而無(wú)需人工干預(yù)。另外,日志信息可以輸出到不同的地方(控制臺(tái),文件等)以備以后研究之用。 Log4net就是為這樣一個(gè)目的設(shè)計(jì)的,用于.N

2、ET開(kāi)發(fā)環(huán)境的日志記錄包。 1.2Log4net的安裝: 用戶可以從/log4net/下載log4net的源代碼。解壓軟件包后,在解壓的src目錄下將log4net.sln載入Visual Studio .NET,編譯后可以得到log4net.dll。用戶要在自己的程序里加入日志功能,只需將log4net.dll引入工程即可。 2 Log4net的結(jié)構(gòu) log4net 有四種主要的組件,分別是Logger(記錄器), Repository(庫(kù)), Appender(附著器)以及 Layout(布局). 2.1Logger 2.1.1 Logger

3、接口 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ì)象,你不必將它在不同的類(lèi)或?qū)ο箝g傳遞,只需要用它的名字為參數(shù)調(diào)用就可以了。log4net框架使用繼承體系,繼承體系類(lèi)似于.NET中的名字空間。也就是說(shuō),如果有兩個(gè)logger,分別被定義為a.b.c和a.b,那么我們說(shuō)a.b是a.b.c

4、的祖先。每一個(gè)logger都繼承了祖先的屬性 Log4net框架定義了一個(gè)ILog接口,所有的logger類(lèi)都必須實(shí)現(xiàn)這個(gè)接口。如果你想實(shí)現(xiàn)一個(gè)自定義的logger,你必須首先實(shí)現(xiàn)這個(gè)接口。你可以參考在/extension目錄下的幾個(gè)例子。 ILog接口的定義如下: Log4net框架定義了一個(gè)叫做LogManager的類(lèi),用來(lái)管理所有的logger對(duì)象。它有一個(gè)GetLogger()靜態(tài)方法,用我們提供的名字參數(shù)來(lái)檢索已經(jīng)存在的Logger對(duì)象。如果框架里不存在該Logger對(duì)象,它也會(huì)為我們創(chuàng)建一個(gè)Logger對(duì)象。代碼如下所示: 1public interface ILog 2 3 vo

5、id 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è)異常類(lèi)型的附加參數(shù)。 10 void Debug(object message, Exception ex); 11 / 12 /Boolean 屬性用來(lái)檢查L(zhǎng)ogger的日志級(jí)別 13 /(我們馬上會(huì)在后面看到日志

6、級(jí)別) 14 bool isDebugEnabled; 15 bool isInfoEnabled; 16 / 其他方法對(duì)應(yīng)的Boolean屬性 17 1819log4net.ILog log = log4net.LogManager.GetLogger("logger-name"); 通常來(lái)說(shuō),我們會(huì)以類(lèi)(class)的類(lèi)型(type)為參數(shù)來(lái)調(diào)用GetLogger(),以便跟蹤我們正在進(jìn)行日志記錄的類(lèi)。傳遞的類(lèi)(class)的類(lèi)型(type)可以用typeof(Classname)方法來(lái)獲得,或者可以用如下的反射方法來(lái)獲得: System.Reflection.Meth

7、odBase.GetCurrentMethod().DeclaringType 盡管符號(hào)長(zhǎng)了一些,但是后者可以用于一些場(chǎng)合,比如獲取調(diào)用方法的類(lèi)(class)的類(lèi)型(type)。 2.1.2 日志的級(jí)別 正如你在ILog的接口中看到的一樣,有五種不同的方法可以跟蹤一個(gè)應(yīng)用程序。事實(shí)上,這五種方法是運(yùn)作在Logger對(duì)象設(shè)置的不同日志優(yōu)先級(jí)別上。這幾種不同的級(jí)別是作為常量定義在log4net.spi.Level類(lèi)中。你可以在程序中使用任何一種方法。但是在最后的發(fā)布中你也許不想讓所有的代碼來(lái)浪費(fèi)你的CPU周期,因此,框架提供了7種級(jí)別和相應(yīng)的Boolean屬性來(lái)控制日志記錄的類(lèi)型。 Level有以

8、下幾種取值 級(jí)別 允許的方法 Boolean屬性 優(yōu)先級(jí)別 OFF Highest FATAL void Fatal(.); bool IsFatalEnabled; RROR void Error(.); bool IsErrorEnabled; WARN void Warn(.); bool IsWarnEnabled; INFO void Info(.); bool IsInfoEnabled; DEBUG void Debug(.); bool IsDebugEnabled; ALL Lowest 表1 Logger的日志級(jí)別 在log4net框架里,通過(guò)設(shè)置配置文件,每個(gè)日志對(duì)象都被

9、分配了一個(gè)日志優(yōu)先級(jí)別。如果沒(méi)有給一個(gè)日志對(duì)象顯式地分配一個(gè)級(jí)別,那么該對(duì)象會(huì)試圖從他的祖先繼承一個(gè)級(jí)別值。 ILog接口的每個(gè)方法都有一個(gè)預(yù)先定義好了的級(jí)別值。正如你在表1看到的,ILog的Inof()方法具有INFO級(jí)別。同樣的,以此類(lèi)推,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)的Boolea

10、n屬性,以決定該方法能不能執(zhí)行。如下的代碼: Logger.Info("message"); Logger.Debug("message"); 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。A

11、LL表示允許所有的日志請(qǐng)求。OFF是拒絕所有的請(qǐng)求。 你也可以顯式地檢查L(zhǎng)ogger對(duì)象的Boolean屬性,如下所示: if (logger.IsDebugEnabled) Logger.Debug("message"); 2.2Repository 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)lo

12、g4net.Repository.ILoggerRepository 接口。但是通常并不是直接實(shí)現(xiàn)該接口,而是以log4net.Repository.LoggerRepositorySkeleton為基類(lèi)繼承。體系庫(kù) (hierarchical repository )則由log4net.Repository.Hierarchy.Hierarchy類(lèi)實(shí)現(xiàn)。 如果你是個(gè)log4net框架的使用者,而非擴(kuò)展者,那么你幾乎不會(huì)在你的代碼里用到Repository的類(lèi)。相反的,你需要用到LogManager類(lèi)來(lái)自動(dòng)管理庫(kù)和日志對(duì)象。 2.3Appender 一個(gè)好的日志框架應(yīng)該能夠產(chǎn)生多目的地的輸出。

13、比如說(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)有必要再自己編寫(xiě)了。但是如果你愿意,可以從log4net.Appender.AppenderSkeleton類(lèi)繼承。 2.4Appende

14、r 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ò)濾器的信息。 2.5Layout Layout 組件用于向用戶顯示最后經(jīng)過(guò)格式化的輸出信息。輸出信息可以以多種格式顯示,主要依賴于我們采用的Layout組件類(lèi)型??梢允蔷€性的或一個(gè)XML文件。Layout組件和一個(gè)Appender

15、組件一起工作。API幫助手冊(cè)中有關(guān)于不同Layout組件的列表。一個(gè)Appender對(duì)象,只能對(duì)應(yīng)一個(gè)Layout對(duì)象。要實(shí)現(xiàn)你自己的Layout類(lèi),你需要從log4net.Layout.LayoutSkeleton類(lèi)繼承,它實(shí)現(xiàn)了ILayout接口。 3 在程序中使用log4net 在開(kāi)始對(duì)你的程序進(jìn)行日志記錄前,需要先啟動(dòng)log4net引擎。這意味著你需要先配置前面提到的三種組件。你可以用兩種方法來(lái)設(shè)定配置:在單獨(dú)的文件中設(shè)定配置或在代碼中定義配置。 因?yàn)橄旅鎺追N原因,推薦在一個(gè)單獨(dú)的文件中定義配置: l 你不需要重新編譯源代碼就能改變配置; 2 你可以在程序正運(yùn)行的時(shí)候就改變配置。這一點(diǎn)

16、在一些WEB程序和遠(yuǎn)程過(guò)程調(diào)用的程序中有時(shí)很重要; 考慮到第一種方法的重要性,我們先看看怎樣在文件中設(shè)定配置信息。 3.1定義配置文件 配置信息可以放在如下幾種形式文件的一種中。 在程序的配置文件里,如AssemblyName.config 或web.config. 在你自己的文件里。文件名可以是任何你想要的名字,如AppName.exe.xyz等. log4net框架會(huì)在相對(duì)于AppDomain.CurrentDomain.BaseDirectory 屬性定義的目錄路徑下查找配置文件??蚣茉谂渲梦募镆檎业奈ㄒ粯?biāo)識(shí)是<log4net>標(biāo)簽。一個(gè)完整的配置文件的例子如下: 1&l

17、t;?xml version="1.0" encoding="utf-8" ?> 2<configuration> 3 <configSections> 4 <section name="log4net" 5type="log4net.Config.Log4NetConfigurationSectionHandler, 6 log4net-net-1.0" /> 7 </configSections> 8 <log4net> 9 <root&g

18、t; 10 <level value="WARN" /> 11 <appender-ref ref="LogFileAppender" /> 12 <appender-ref ref="ConsoleAppender" /> 13 </root> 14 <logger name="testApp.Logging"> 15 <level value="DEBUG"/> 16 </logger> 17 <app

19、ender name="LogFileAppender" 18 type="log4net.Appender.FileAppender" > 19 <param name="File" value="log-file.txt" /> 20 <param name="AppendToFile" value="true" /> 21 <layout type="log4net.Layout.PatternLayout">

20、; 22 <param name="Header" value="Headerrn"/> 23 <param name="Footer" value="Footerrn"/> 24 <param name="ConversionPattern" 25 value="%d %t %-5p %c %x - %m%n" 26 /> 27 </layout> 28 <filter type="log4net.Filter

21、.LevelRangeFilter"> 29 <param name="LevelMin" value="DEBUG" /> 30 <param name="LevelMax" value="WARN" /> 31 </filter> 32 </appender> 33 <appender name="ConsoleAppender" 34 type="log4net.Appender.ConsoleAppender

22、" > 35 <layout type="log4net.Layout.PatternLayout"> 36 <param name="ConversionPattern" 37 value="%d %t %-5p %c %x - %m%n" 38 /> 39 </layout> 40 </appender> 41 </log4net> 42</configuration> 4344你可以直接將上面的文本拷貝到任何程序中使用,但是最好還是能夠理解配

23、置文件是怎樣構(gòu)成的。 只有當(dāng)你需要在應(yīng)用程序配置文件中使用log4net配置時(shí),才需要在<configSection>標(biāo)簽中加入<section>配置節(jié)點(diǎn)入口。對(duì)于其他的單獨(dú)文件,只有<log4net>標(biāo)簽內(nèi)的文本才是必需的,這些標(biāo)簽的順序并不是固定的。下面我們依次講解各個(gè)標(biāo)簽內(nèi)文本的含義: 3.1.1 <root> 在框架的體系里,所有的日志對(duì)象都是根日志(root logger)的后代。 因此如果一個(gè)日志對(duì)象沒(méi)有在配置文件里顯式定義,則框架使用根日志中定義的屬性。在<root>標(biāo)簽里,可以定義level級(jí)別值和Appender的列

24、表。如果沒(méi)有定義LEVEL的值,則缺省為DEBUG??梢酝ㄟ^(guò)<appender-ref>標(biāo)簽定義日志對(duì)象使用的Appender對(duì)象。<appender-ref>聲明了在其他地方定義的Appender對(duì)象的一個(gè)引用。在一個(gè)logger對(duì)象中的設(shè)置會(huì)覆蓋根日志的設(shè)置。而對(duì)Appender屬性來(lái)說(shuō),子日志對(duì)象則會(huì)繼承父日志對(duì)象的Appender列表。這種缺省的行為方式也可以通過(guò)顯式地設(shè)定<logger>標(biāo)簽的additivity屬性為false而改變。 Additivity的值缺省是true. <root> <level value="

25、WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> 1<logger name="testApp.Logging" additivity="false"> 2</logger> 33.1.2 <Logger> <logger> 元素預(yù)定義了一個(gè)具體日志對(duì)象的設(shè)置。然后通過(guò)調(diào)用Log

26、Manager.GetLogger(“testAPP.Logging”)函數(shù),你可以檢索具有該名字的日志。如果LogManager.GetLogger()打開(kāi)的不是預(yù)定義的日志對(duì)象,則該日志對(duì)象會(huì)繼承根日志對(duì)象的屬性。知道了這一點(diǎn),我們可以說(shuō),其實(shí)<logger>標(biāo)簽并不是必須的。 3.1.3 <appender> 在<root>標(biāo)簽或單個(gè)的<logger>標(biāo)簽里的Appender對(duì)象可以用<appender>標(biāo)簽定義。<appender>標(biāo)簽的基本形式如上面所示。它定義了appender的名字和類(lèi)型。 另外比較重要的是&

27、lt;appender>標(biāo)簽內(nèi)部的其他標(biāo)簽。不同的appender有不同的<param>標(biāo)簽。在這里,為了使用FileAppender,你需要一個(gè)文件名作為參數(shù)。另外還需要一個(gè)在<appender>標(biāo)簽內(nèi)部定義一個(gè)Layout對(duì)象。Layout對(duì)象定義在它自己的<layout>標(biāo)簽內(nèi)。<layout>標(biāo)簽的type屬性定義了Layout的類(lèi)型(在本例里是PatternLayout),同時(shí)也確定了需要提供的參數(shù)值。Header和Footer標(biāo)簽提供了一個(gè)日志會(huì)話(logging session)開(kāi)始和結(jié)束時(shí)輸出的文字。有關(guān)每種appender

28、的具體配置的例子,可以在log4netdocmanualexample-config-appender.html中得到。 1<logger name="testApp.Logging"> 2 <level value="DEBUG"/> 3</logger>4 1<appender name="LogFileAppender" 2type="log4net.Appender.FileAppender" > 3<param name="File"

29、; value="log-file.txt" /> 4 <param name="AppendToFile" value="true" /> 5 <layout type="log4net.Layout.PatternLayout"> 6 <param name="Header" value="Headerrn" /> 7 <param name="Footer" value="Footerrn&q

30、uot;/> 8 <param name="ConversionPattern" 9 value="%d %t %-5p %c - %m%n" 10 /> 11 </layout> 12 <filter type="log4net.Filter.LevelRangeFilter"> 13 <param name="LevelMin" value="DEBUG" /> 14 <param name="LevelMax"

31、 value="WARN" /> 15 </filter> 16</appender> 17183.1.4 log4net.Layout.PatternLayout中的轉(zhuǎn)換模式(ConversionPattern) %m(message):輸出的日志消息,如ILog.Debug()輸出的一條消息 %n(new line):換行 %d(datetime):輸出當(dāng)前語(yǔ)句運(yùn)行的時(shí)刻 %r(run time):輸出程序從運(yùn)行到執(zhí)行到當(dāng)前語(yǔ)句時(shí)消耗的毫秒數(shù) %t(thread id):當(dāng)前語(yǔ)句所在的線程ID %p(priority): 日志的當(dāng)前優(yōu)先級(jí)別

32、,即DEBUG、INFO、WARN等 %c(class):當(dāng)前日志對(duì)象的名稱(chēng),例如: 模式字符串為:%-10c -%m%n 代碼為: 則輸出為下面的形式: 1ILog log=LogManager.GetLogger(“Exam.Log”); 2log.Debug(“Hello”); 34Exam.Log - Hello %L:輸出語(yǔ)句所在的行號(hào) %F:輸出語(yǔ)句所在的文件名 %-數(shù)字:表示該項(xiàng)的最小長(zhǎng)度,如果不夠,則用空格填充 例如,轉(zhuǎn)換模式為%r %t%-5p %c - %m%n 的 PatternLayout 將生成類(lèi)似于以下內(nèi)容的輸出: 176 main INFO org.foo.Bar

33、 - Located nearest gas station. 3.1.5 <filter> 最后,讓我們看看在Appender元素里的<filter>標(biāo)簽。它定義了應(yīng)用到Appender對(duì)象的過(guò)濾器。本例中,我們使用了LevelRangeFilter過(guò)濾器,它可以只記錄LevelMin和LevelMax參數(shù)指定的日志級(jí)別之間的日志事件。可以在一個(gè)Appender上定義多個(gè)過(guò)濾器(Filter),這些過(guò)濾器將會(huì)按照它們定義的順序?qū)θ罩臼录M(jìn)行過(guò)濾。其他過(guò)濾器的有關(guān)信息可以在log4net的SDK文檔中找到。 3.2使用配置文件 3.2.1 關(guān)聯(lián)配置文件 當(dāng)我們創(chuàng)建了上面

34、的配置文件后,我們接下來(lái)需要把它和我們的應(yīng)用聯(lián)系起來(lái)。缺省的,每個(gè)獨(dú)立的可執(zhí)行程序集都會(huì)定義它自己的配置。log4net框架使用 log4net.Config.DOMConfiguratorAttribute在程序集的級(jí)別上定義配置文件。 例如:可以在項(xiàng)目的AssemblyInfo.cs文件里添加以下的語(yǔ)句 assembly:log4net.Config.DOMConfigurator(ConfigFile="filename", ConfigFileExtension="ext",Watch=true/false) l ConfigFile:指出了我們

35、的配置文件的路徑及文件名,包括擴(kuò)展名。 l ConfigFileExtension:如果我們對(duì)被編譯程序的程序集使用了不同的文件擴(kuò)展名,那么我們需要定義這個(gè)屬性,缺省的,程序集的配置文件擴(kuò)展名為”config”。 l Watch (Boolean屬性): log4net框架用這個(gè)屬性來(lái)確定是否需要在運(yùn)行時(shí)監(jiān)視文件的改變。如果這個(gè)屬性為true,那么FileSystemWatcher將會(huì)被用來(lái)監(jiān)視文件的改變,重命名,刪除等事件。 其中:ConfigFile和ConfigFileExtension屬性不能同時(shí)使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config

36、.txt” ConfigFileExtension則是指明了和可執(zhí)行程序集同名的配置文件的擴(kuò)展名,例如,應(yīng)用程序的名稱(chēng)是”test.exe”,ConfigFileExtension=”txt”,則配置文件就應(yīng)該是” ; 也可以不帶參數(shù)應(yīng)用DOMConfiguratio(): assembly: log4net.Config.DOMConfigurator() 也可以在程序代碼中用DOMConfigurator類(lèi)打開(kāi)配置文件。類(lèi)的構(gòu)造函數(shù)需要一個(gè)FileInfo對(duì)象作參數(shù),以指出要打開(kāi)的配置文件名。 這個(gè)方法和前面在程序集里設(shè)置屬性打開(kāi)一個(gè)配置文件的效果是一樣的。 log4net.Config.

37、DOMConfigurator.Configure( new FileInfo("TestLogger.Exe.Config"); DOMConfigurator 類(lèi)還有一個(gè)方法ConfigureAndWatch(.), 用來(lái)配置框架并檢測(cè)文件的變化。 以上的步驟總結(jié)了和配置相關(guān)的各個(gè)方面,下面我們將分兩步來(lái)使用logger對(duì)象。 3.2.2 創(chuàng)建或獲取日志對(duì)象 日志對(duì)象會(huì)使用在配置文件里定義的屬性。如果某個(gè)日志對(duì)象沒(méi)有事先在配置文件里定義,那么框架會(huì)根據(jù)繼承結(jié)構(gòu)獲取祖先節(jié)點(diǎn)的屬性,最終的,會(huì)從根日志獲取屬性。如下所示: Log4net.ILog log = Log4net

38、.LogManager.GetLogger("MyLogger"); 3.2.3 輸出日志信息 可以使用ILog的幾種方法輸出日志信息。你也可以在調(diào)用某方法前先檢查IsXXXEnabled布爾變量,再?zèng)Q定是否調(diào)用輸出日志信息的函數(shù),這樣可以提高程序的性能。因?yàn)榭蚣茉谡{(diào)用如ILog.Debug()這樣的函數(shù)時(shí),也會(huì)先判斷是否滿足Level日志級(jí)別條件。 if (log.IsDebugEnabled) log.Debug("message"); if (log.IsInfoEnabled) log.Info("message); 3.3在程序中配置

39、log4net 除了前面講的用一個(gè)配置文件來(lái)配置log4net以外,還可以在程序中用代碼來(lái)配置log4net框架。如下面的例子: /和PatternLayout一起使用FileAppender 盡管這里用代碼配置log4net也很方便,但是你卻不能分別配置每個(gè)日志對(duì)象。所有的這些配置都是被應(yīng)用到根日志上的。 1log4net.Config.BasicConfigurator.Configure( 2 new log4net.Appender.FileAppender( 3 new log4net.Layout.PatternLayout("%d 4 %t%-5p %c %x - %m

40、%n"),"testfile.log"); 5/ using a FileAppender with an XMLLayout 6log4net.Config.BasicConfigurator.Configure( 7 new log4net.Appender.FileAppender( 8 new log4net.Layout.XMLLayout(),"testfile.xml"); 9/ using a ConsoleAppender with a PatternLayout 10log4net.Config.BasicConfigura

41、tor.Configure( 11 new log4net.Appender.ConsoleAppender( 12 new log4net.Layout.PatternLayout("%d %t %-5p %c - %m%n"); 13/ using a ConsoleAppender with a SimpleLayout 14log4net.Config.BasicConfigurator.Configure( 15 new log4net.Appender.ConsoleAppender(new 16 log4net.Layout.SimpleLayout(); 1

42、718log4net.Config.BasicConfigurator 類(lèi)使用靜態(tài)方法Configure 設(shè)置一個(gè)Appender 對(duì)象。而Appender的構(gòu)造函數(shù)又會(huì)相應(yīng)的要求Layout對(duì)象。你也可以不帶參數(shù)直接調(diào)用BasicConfigurator.Configure(),它會(huì)使用一個(gè)缺省的PatternLayout對(duì)象,在一個(gè)ConsoleAppender中輸出信息。如下所示: log4net.Config.BasicConfigurator.Configure(); 在輸出時(shí)會(huì)顯示如下格式的信息: 0 1688 DEBUG log1 A B C - Test 20 1688 INFO log1 A B C - Test 當(dāng)log4net框架被配置好以后,就可以如前所述使用日志功能了。 4 總結(jié) 使用log4net可以很方便地為應(yīng)用添加日志功能。應(yīng)用Log4net,使用者可以很精確地控制日志信息的輸出,減少了多余信息,提高了日志記錄性能。同時(shí),通過(guò)外部配置文件,用戶可以不用重新編譯程序就能改變應(yīng)用的日志行為,使得用戶可以根據(jù)情況靈活地選擇要記錄的信息。 程序里使用,你可以按照這樣的步驟: 1.添加log4net引用 2.為項(xiàng)目新增一個(gè)文件

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論