




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
簡(jiǎn)Log4net的優(yōu)點(diǎn)幾乎所有的大型應(yīng)用都會(huì)有自己的用于調(diào)試的P。因?yàn)橐坏┏绦虮徊渴鹨院?,就不太可能再利用專門的調(diào)試工具了。然而一個(gè)管理員可能需要有一套強(qiáng)大的日志系統(tǒng)來診斷和修復(fù)配置上的問題。的精確環(huán)境,可供開發(fā)人員盡快找到應(yīng)用程序中的u;一旦在程序中加入了og輸出代碼,程序運(yùn)行過程中就能生成并輸出日志信息而無需人工干預(yù)。另外,日志信息可以輸出到不同的地方(控制臺(tái),文件等)以備以后研究之用。Log4net就是為這樣一個(gè)目的設(shè)計(jì)的,用于.NET開發(fā)環(huán)境的日志Log4net的安裝用戶可以 log4net的源代碼。解壓軟件包后,在解壓的下將lo4neln載入iualuioET,編譯后可以得到lo4ne.dll。用戶要在自己的程序里加入日志功能,只需將lo4nell引入工程即可。Log4net的結(jié)log4net有四種主要的組件,分別是Logger(記錄器)Repository(庫)Appender(附著器)以及Layout(布局).Logger接oer是應(yīng)用程序需要交互的主要組件,它用來產(chǎn)生日志消息。產(chǎn)生的日志消息并不直接顯示,還要預(yù)先經(jīng)過aout的格式化處理后才會(huì)輸出。oer提供了多種方式來記錄一個(gè)日志消息,你可以在你的應(yīng)用程序里創(chuàng)建多個(gè)oge,每個(gè)實(shí)例化的oer對(duì)象都被lo4net框架作為命名實(shí)體naedeniy)來。這意味著為了重用oger對(duì)象,你不必將它在不同的類或?qū)ο箝g傳遞,只需要用它的名字為參數(shù)調(diào)用就可以了。lo4net框架使用繼承體系,繼承體系類似于ET中的名字空間。也就是說,如果有兩個(gè)loge分別被定義為ac和a.,那么我們說ab是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接口的定義如下publicinterface{voidDebug(objectmessage);voidInfo(objectmessage);voidWarn(objectmessage);voidError(objectmessage);voidFatal(objectmessage);//以上的每一個(gè)方法都有一個(gè)重載的方法,用來支持異常處理voidDebug(objectmessage,Exceptionex);////Boolean屬性用來檢查L(zhǎng)ogger的日志級(jí)boolisDebugEnabled;bool//…其他方法對(duì)應(yīng)的Boolean屬}Log4net框架定義了一個(gè)叫做LogManager的類,用來管理所有的logger對(duì)象。它有一個(gè)GetLogger()靜態(tài)方法,用我們提供的名字參數(shù)來檢索已經(jīng)存在的Logger對(duì)象。如果框架里不存Logger對(duì)象,它也會(huì)為我們創(chuàng)建Logger對(duì)象。代碼如下所示:log4net.ILoglog=log4net.LogManager.GetLogger("logger-通常來說,我們會(huì)以類(la)的類型(te)為參數(shù)來調(diào)用eoge),以便我們正在進(jìn)行日志記錄的類。傳遞的類las的類型te可以用yeof(Clanae)方法來獲得,或者可以用如下的反射方法來獲得:盡管符號(hào)長(zhǎng)了一些,但是后者可以用于一些場(chǎng)合,比如獲取調(diào)用方法的類(class)的類型(type)正如你在Iog的接口中看到的一樣,有五種不同的方法可以一個(gè)應(yīng)用程序。事實(shí)上,這五種方法是運(yùn)作在oger對(duì)象設(shè)置的不同日志優(yōu)先級(jí)別上。這幾種不同的級(jí)別是作為常量定義在lo4nesieel類中。你可以在程序中使用任何法。但是在最后的發(fā)布中你也許不想讓所有的代碼來浪費(fèi)你的CPU周期,因此,框架提供了7種級(jí)別和相應(yīng)的oolean屬性來控制日志記錄的類型。Level有以下幾種取級(jí)允許的Boolean屬優(yōu)先級(jí)voidboolvoidboolvoidboolvoidboolvoidbool1Logger的日志級(jí)在lo4net框架里,通過設(shè)置配置文件,每個(gè)日志對(duì)象都被分配了一個(gè)日志優(yōu)先級(jí)別。如果沒有給一個(gè)日志對(duì)象顯式地分配一個(gè)級(jí)別,那么該對(duì)象會(huì)試圖從他的祖先繼承一個(gè)級(jí)別值。Iog接口的每個(gè)方法都有一個(gè)預(yù)先定義好了的級(jí)別值。正如你在表1看到的,Iog的Inof()方法具有IFO級(jí)別。同樣的,以此類推,Eo方法具有ERRR級(jí)別。當(dāng)我們使用以上的任何法時(shí),lo4net框架會(huì)檢查日志對(duì)象loer的級(jí)別和方法的級(jí)別。只有當(dāng)方法的級(jí)別高于日志級(jí)別時(shí),日志請(qǐng)求才會(huì)被接受并執(zhí)行。舉例說明,當(dāng)你創(chuàng)建了一個(gè)日志對(duì)象,并且把他的級(jí)別設(shè)置為IF。于是框架會(huì)設(shè)置日志的每個(gè)oolean屬性。當(dāng)你調(diào)用相應(yīng)的日志方法時(shí),框架會(huì)檢查相應(yīng)的oolean屬性,以決定該方法能不能執(zhí)行。如下的代碼:對(duì)于第法,Info)的級(jí)別等與日志的級(jí)別(IF),因此日志請(qǐng)求會(huì)被傳遞,我們可以得到輸出結(jié)果eae”。對(duì)于第二種方法,Deug)的級(jí)別低于日志對(duì)象loer的日志級(jí)別(IF,因此,日志請(qǐng)求被了,我們得不到任何輸出。同樣的,針對(duì)第三行語句,我們可以很容易得出結(jié)論。在表1中有兩個(gè)特殊的級(jí)別:ALL和OFF。ALL表示允許所有的日志請(qǐng)求。OFF是所有的請(qǐng)求。你也可以顯式地檢查L(zhǎng)ogger對(duì)象的Boolean屬性,如下所示:if{}Repository主要用于負(fù)責(zé)日志對(duì)象組織結(jié)構(gòu)的。在log4net的以前版本中,框架僅支持分等級(jí)的組織結(jié)構(gòu)(hierarchicalorganization)。這種等級(jí)結(jié)構(gòu)本質(zhì)上是庫的一個(gè)實(shí)現(xiàn),并且定義在log4net.Repository.Hierarchy名字空間中。要實(shí)現(xiàn)一個(gè)Repository,需要實(shí)現(xiàn)log4net.Repository.ILoggerRepository接口。但是通常并不是直接實(shí)現(xiàn)該接口,而是以log4net.Repository.LoggerRepositorySkeleton為基類繼承。體系庫(hierarchicalrepository)則由log4net.Repository.Hierarchy.Hierarchy類實(shí)現(xiàn)。如果你是個(gè)lo4net框架的使用者,而非擴(kuò)展者,那么你幾乎不會(huì)在你的代碼里用到Reoiory的類。相反的,你需要用到oganaer類來自動(dòng)管理庫和日志對(duì)象。一個(gè)好的日志框架應(yīng)該能夠產(chǎn)生多目的地的輸出。比如說輸出到控制臺(tái)或保存到一個(gè)日志文件。lo4net能夠很好的滿足這些要求。它使用一個(gè)叫做Aener的組件來定義輸出介質(zhì)。正如名字所示,這些組件把它們附加到oer日志組件上并將輸出傳遞到輸出流中。你可以把多個(gè)pener組件附加到一個(gè)日志對(duì)象上。o4net框架提供了幾個(gè)Aener組件。關(guān)于lo4net提供的Aener組件的完整列表可以在lo4net框架的幫助手冊(cè)中找到。有了這些現(xiàn)成的Aener組件,一般來說你沒有必要再自己編寫了。但是如果你愿意,可以從lo4neene.peneeleon類繼承。Appender一個(gè)pener對(duì)象缺省地將所有的日志傳遞到輸出流。pener的過濾器(enerFile)可以按照不同的標(biāo)準(zhǔn)過濾日志。在lo4neFiler的名字空間下已經(jīng)有幾個(gè)預(yù)定義的過濾器。使用這些過濾器,你可以按照日志級(jí)別范圍過濾日志,或者按照某個(gè)特殊的字符串進(jìn)行過濾。你可以在PI的幫助文件中發(fā)現(xiàn)關(guān)于過濾器的信息。Layout組件用于向用戶顯示最后經(jīng)過格式化的輸出信息。輸出信息可以以多種格式顯示,主要依賴于我們采用的Layout組件類型。可以是線性的或一個(gè)XML文件。Layout組件和一個(gè)Appender組件一起工作。API幫助手冊(cè)中有關(guān)于不同Layout組件的列表。一個(gè)Appender對(duì)象,只能對(duì)應(yīng)一個(gè)Layout對(duì)象。要實(shí)現(xiàn)你自己的Layout類,你需要從log4net.Layout.LayoutSkeleton類繼承,它實(shí)現(xiàn)了ILayout接口。在程序中使用在開始對(duì)你的程序進(jìn)行日志記錄前,需要先啟動(dòng)lo4net引擎。這意味著你需要先配置前面提到的三種組件。你可以用兩種方法來設(shè)定配置:在單獨(dú)的文件中設(shè)定配置或在代碼中定義配置。因?yàn)橄旅鎺追N原因,推薦在一個(gè)單獨(dú)的文件中定義配置你不需要重新編譯源代碼就能改變配置你可以在程序正運(yùn)行的時(shí)候就改變配置。這一點(diǎn)在一些WEB程序和過程調(diào)用的程序中有時(shí)很重要;考慮到第法的重要性,我們先看看怎樣在文件中設(shè)定配置信息。定義配置配置信息可以放在如下幾種形式文件的一種中在程序的配置文件里,如AssemblyName.config或在你自己的文件里。文件名可以是任何你想要的名字,如AppName.exe.xyz等log4net框架會(huì)在相對(duì)于App.Current.BaseDirectory屬性定義的 <?xmlversion="1.0"encoding="utf-8"<sectionname="log4net"log4net-net-<levelvalue="WARN"<appender-refref="LogFileAppender"<logger<level<appendertype="log4net.Appender.FileAppender"<paramname="File"value="log-file.txt"<paramname="AppendToFile"value="true"<layout<paramname="Header"<paramname="Footer"<paramvalue="%d[%t]%-5p%c[%x]-<filter<paramname="LevelMin"value="DEBUG"<paramname="LevelMax"value="WARN"<appendertype="log4net.Appender.ConsoleAppender"<layout<paramname="ConversionPattern"value="%d[%t]%-5p%c[%x]-%m%n"你可以直接將上面的文本拷貝到任何程序中使用,但是最好還是能夠理解配置文件是怎樣構(gòu)成的。只有當(dāng)你需要在應(yīng)用程序配置文件中使用lo4net配置時(shí),才需要在onfieion>中加入eion配置節(jié)點(diǎn)。對(duì)于其他的單獨(dú)文件,只有l(wèi)o4ne內(nèi)的文本才是必需的,這些的順序并不是固定的。下面我們依次講解各個(gè)標(biāo)簽內(nèi)文本的含義:<levelvalue="WARN"<appender-refref="LogFileAppender"在框架的體系里,所有的日志對(duì)象都是根日志ootloe)的后代。因此如果一個(gè)日志對(duì)象沒有在配置文件里顯式定義,則框架使用根日志中定義的屬性。在<oo>里,可以定義leel級(jí)別值和ener的列表。如果沒有定義EEL的值,則缺省為DEUG??梢酝ㄟ^apeneref定義日志對(duì)象使用的ener對(duì)象。apeneref>了在其他地方定義的Aener對(duì)象的一個(gè)。在一個(gè)loer對(duì)象中的設(shè)置會(huì)覆蓋根日志的設(shè)置。而對(duì)Aener屬性來說,子日志對(duì)象則會(huì)繼承父日志對(duì)象的Aener列表。這種缺省的行為方式也可以通過顯式地設(shè)定loge的aiiity屬性為fale而改變。<loggername="testApp.Logging"Additivity的值缺省是<logger<levelloer>元素預(yù)定義了一個(gè)具體日志對(duì)象的設(shè)置。然后通過調(diào)用oanaeetogeesPPoing”)函數(shù),你可以檢索具有該名字的日志。如果oanaeetoge(…)打開的不是預(yù)定義的日志對(duì)象,則該日志對(duì)象會(huì)繼承根日志對(duì)象的屬性。知道了這一點(diǎn),我們可以說,其實(shí)loge并不是必須的。<appendername="LogFileAppender"type="log4net.Appender.FileAppender"><paramname="File"value="log-file.txt"<paramname="AppendToFile"value="true"<layout<paramname="Header"value="[Header]\r\n"<paramname="Footer"<paramname="ConversionPattern"value="%d[%t]%-5p%c-%m%n"<filter<paramname="LevelMin"value="DEBUG"<paramname="LevelMax"value="WARN"在<root>或單個(gè)的<logger>里的Appender對(duì)象可以用<appender>定義<appender>的基本形式如上面所示。它定義了appender的名字和類型。另外比較重要的<appender>內(nèi)部的其他。不同的appender有不同的<param>。在這里,為了使用FileAppender,你需要一個(gè)文件名作為參數(shù)。另外還需要一個(gè)在<appender>內(nèi)部定義一個(gè)Layout對(duì)象。Layout對(duì)象定義在它自己的<layout>內(nèi)。<layout>的type屬性定義了Layout的類型(在本例里是PatternLayout),同時(shí)也確定了需要提供的參數(shù)值。Header和Footer提供了一個(gè)日志會(huì)話(loggingsession)開始和結(jié)束時(shí)輸出的文字。有關(guān)每種appender的具體配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。log4net.Layout.PatternLayout中的轉(zhuǎn)換模式%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消%n(newline):換%d(datetime):輸出當(dāng)前語句運(yùn)行的時(shí)%r(runtime):輸出程序從運(yùn)行到執(zhí)行到當(dāng)前語句時(shí)消耗的毫%t(threadid):當(dāng)前語句所在的線程%p(priority):日志的當(dāng)前優(yōu)先級(jí)別,即DEBUG、INFO、WARN…模式字符串為:%-10c-%m%nILoglog=LogManager.GetLogger(“Exam.Log”);則輸出為下面的形式 -%L:輸出語句所在的行%F:輸出語句所在的文件%-數(shù)字:表示該項(xiàng)的最小長(zhǎng)度,如果不夠,則用空格例如,轉(zhuǎn)換模式為%r%t]%-5pcm%nPatternLayout將生成類似于以下內(nèi)容的輸出176[main]INFOorg.foo.Bar-Locatednearestgas最后,讓我們看看在Aener元素里的file>。它定義了應(yīng)用到ener對(duì)象的過濾器。本例中,我們使用了eelRaneFiler過濾器它可以只記錄eelin和elax參數(shù)指定的日志級(jí)別之間的日志。可以在一個(gè)Aener上定義多個(gè)過濾器(File)這些過濾器將會(huì)按照它們定義的順序?qū)θ罩具M(jìn)行過濾。其他過濾器的有關(guān)信息可以在lo4net的DK文檔中找到。使用配置關(guān)聯(lián)配置文當(dāng)我們創(chuàng)建了上面的配置文件后,我們接下來需要把它和我們的應(yīng)用聯(lián)系起來。缺省的,每個(gè)獨(dú)立的可執(zhí)行程序集都會(huì)定義它自己的配置。lo4net框架使用lo4neConfiDOConfiuaotiue在程序集的級(jí)別上定義配置文件。例如:可以在項(xiàng)目的AssemblyInfo.cs文件里添加以下的ConfigFile:了我們的配置文件的路徑及文件名,包括擴(kuò)展名igilexei:如果我們對(duì)被編譯程序的程序集使用了不同的文件擴(kuò)展名,那么我們需要定義這個(gè)屬性,缺省的,程序集的配置文件擴(kuò)展名為onfi”。Watch(Boolean屬性):log4net框架用這個(gè)屬性來確定是否需要在運(yùn)行時(shí)監(jiān)視文件的改變。如果這個(gè)屬性為true,那么FileSystemWatcher將會(huì)被用來監(jiān)視文件的改變,重命名,刪除等。其中:ConfiFile和CnfiFieEenion屬性不能同時(shí)使用,ConfiFie了配置文件的名字,例如,ConfiFileConfi”ConfiFieEenion則是指明了和可執(zhí)行程序集同名的配置文件的擴(kuò)展名,例如,應(yīng)用程序的名稱是eeeConfiFileEenion,則配置文件就應(yīng)該是esexe”;也可以不帶參數(shù)應(yīng)用[assembly:也可以在程序代碼中用DConfiuaor類打開配置文件。類的構(gòu)造函數(shù)需要一個(gè)FileInfo對(duì)象作參數(shù),以要打開的配置文件名。這個(gè)方法和前面在程序集里設(shè)置屬性打開一個(gè)配置文件的效果是一樣的。newFileInfo("TestLogger.Exe.Config"));DOMConfigurator類還有一個(gè)方法ConfigureAndWatch用來配置框架并檢測(cè)文件的變化。以上的步驟總結(jié)了和配置相關(guān)的各個(gè)方面,下面分兩步來使用logger對(duì)象。創(chuàng)建或獲取日志對(duì)據(jù)繼承結(jié)構(gòu)獲取祖先節(jié)點(diǎn)的屬性,最終的,會(huì)從根日志獲取屬性。如下所示:Log4net.ILoglog=輸出日志信可以使用Iog的幾種方法輸出日志信息。你也可以在調(diào)用某方法前先檢查IXEnaled布爾變量,再?zèng)Q定是否調(diào)用輸出日志信息的函數(shù),這樣可以提高程序的性能。因?yàn)榭蚣茉谡{(diào)用如IoDeu(…)這樣的函數(shù)時(shí),也會(huì)先判斷是否滿足eel日志級(jí)別條件。if(log.IsDebugEnabled)log.Debug("message");if(log.IsInfoEnabled)log.Info("message);在程序中配置除了前面講的用一個(gè)配置文件來配置log4net以外,還可以在程序中用代碼來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地撂荒復(fù)耕合同范本
- 廠房照明出租合同范本
- 東莞公積金擔(dān)保合同范本
- 企業(yè)簽訂項(xiàng)目合同范本
- 售后維修保養(yǎng)合同范本
- 兒童攝影選合同范本
- 商混站購(gòu)銷合同范本
- 啟德留學(xué)合同范本
- 員工代理業(yè)務(wù)合同范本
- 國(guó)際工程英文合同范本
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫
- 2024年職工普法教育宣講培訓(xùn)課件
- 自編冷庫庫容制冷量設(shè)備對(duì)照表
- “全員安全風(fēng)險(xiǎn)辨識(shí)”活動(dòng)實(shí)施方案
- 追覓科技在線測(cè)評(píng)邏輯題
- 凝中國(guó)心鑄中華魂鑄牢中華民族共同體意識(shí)-小學(xué)民族團(tuán)結(jié)愛國(guó)主題班會(huì)課件
- 第一編第3章 古希臘教育的興衰
- 女性更年期科普-健康科普課件
- 全過程工程咨詢管理服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 2024年中考物理實(shí)驗(yàn)(全國(guó)版):探究光的反射定律(解析版)
- 四川省遂寧市2023-2024學(xué)年高二下學(xué)期期末考試地理試題
評(píng)論
0/150
提交評(píng)論