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

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

新聞中心

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

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

我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、槐蔭ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的槐蔭網(wǎng)站制作公司

Layout

Layout 組件用于向用戶顯示最后經(jīng)過格式化的輸出信息。輸出信息可以以多種格式顯示,主要依賴于我們采用的Layout組件類型??梢允蔷€性的或一個XML文件。Layout組件和一個Appender組件一起工作。API幫助手冊中有關(guān)于不同Layout組件的列表。一個Appender對象,只能對應(yīng)一個Layout對象。要實現(xiàn)你自己的Layout類,你需要從log4net.Layout.LayoutSkeleton類繼承,它實現(xiàn)了ILayout接口。

4 在程序中使用log4net

在開始對你的程序進行日志記錄前,需要先啟動log4net引擎。這意味著你需要先配置前面提到的三種組件。你可以用兩種方法來設(shè)定配置:在單獨的文件中設(shè)定配置或在代碼中定義配置。

因為下面幾種原因,推薦在一個單獨的文件中定義配置:

  • 你不需要重新編譯源代碼就能改變配置;
  • 你可以在程序正運行的時候就改變配置。

這一點在一些WEB程序和遠程過程調(diào)用的程序中有時很重要;

考慮到第一種方法的重要性,我們先看看怎樣在文件中設(shè)定配置信息。

(1)定義配置文件

配置信息可以放在如下幾種形式文件的一種中。

在程序的配置文件里,如AssemblyName.config 或web.config.

在你自己的文件里。文件名可以是任何你想要的名字,如AppName.exe.xyz等.

log4net框架會在相對于AppDomain.CurrentDomain.BaseDirectory 屬性定義的目錄路徑下查找配置文件??蚣茉谂渲梦募镆檎业奈ㄒ粯俗R是標簽。一個完整的配置文件的例子如下:

 
 
 
  1.  
  2.  
  3.  
  4. type="log4net.Config.Log4NetConfigurationSectionHandler,  
  5. log4net-net-1.0" /> 
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14. type="log4net.Appender.FileAppender" > 
  15.  
  16.  
  17.  
  18.  
  19.  
  20. value="%d [%t] %-5p %c [%x] - %m%n" 
  21. /> 
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28. type="log4net.Appender.ConsoleAppender" > 
  29.  
  30. value="%d [%t] %-5p %c [%x] - %m%n"   
  31. /> 
  32.  
  33.  
  34.  
  35.  

你可以直接將上面的文本拷貝到任何程序中使用,但是最好還是能夠理解配置文件是怎樣構(gòu)成的。只有當你需要在應(yīng)用程序配置文件中使用log4net配置時,才需要在標簽中加入

配置節(jié)點入口。對于其他的單獨文件,只有標簽內(nèi)的文本才是必需的,這些標簽的順序并不是固定的。下面我們依次講解各個標簽內(nèi)文本的含義:

(2)

 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  

在框架的體系里,所有的日志對象都是根日志(root logger)的后代。因此如果一個日志對象沒有在配置文件里顯式定義,則框架使用根日志中定義的屬性。在標簽里,可以定義level級別值和Appender的列表。如果沒有定義LEVEL的值,則缺省為DEBUG??梢酝ㄟ^標簽定義日志對象使用的Appender對象。聲明了在其他地方定義的Appender對象的一個引用。在一個logger對象中的設(shè)置會覆蓋根日志的設(shè)置。而對Appender屬性來說,子日志對象則會繼承父日志對象的Appender列表。這種缺省的行為方式也可以通過顯式地設(shè)定標簽的additivity屬性為false而改變。

 
 
 
  1.  
  2.  

Additivity的值缺省是true.

 
 
 
  1.  
  2.  
  3.  
  4.  

元素預(yù)定義了一個具體日志對象的設(shè)置。然后通過調(diào)用LogManager.GetLogger(“testAPP.Logging”)函數(shù),你可以檢索具有該名字的日志。如果LogManager.GetLogger(…)打開的不是預(yù)定義的日志對象,則該日志對象會繼承根日志對象的屬性。知道了這一點,我們可以說,其實標簽并不是必須的。

(3) 

 
 
 
  1. type="log4net.Appender.FileAppender" > 
  2.  
  3.  
  4.  
  5.  
  6.  
  7. value="%d [%t] %-5p %c - %m%n"   
  8. /> 
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  

標簽或單個的標簽里的Appender對象可以用標簽定義。標簽的基本形式如上面所示。它定義了appender的名字和類型。另外比較重要的是標簽內(nèi)部的其他標簽。不同的appender有不同的標簽。在這里,為了使用FileAppender,你需要一個文件名作為參數(shù)。另外還需要一個在標簽內(nèi)部定義一個Layout對象。Layout對象定義在它自己的標簽內(nèi)。標簽的type屬性定義了Layout的類型(在本例里是PatternLayout),同時也確定了需要提供的參數(shù)值。Header和Footer標簽提供了一個日志會話(logging session)開始和結(jié)束時輸出的文字。有關(guān)每種appender的具體配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。

(4) log4net.Layout.PatternLayout中的轉(zhuǎn)換模式(ConversionPattern)

%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息

%n(new line):換行

%d(datetime):輸出當前語句運行的時刻

%r(run time):輸出程序從運行到執(zhí)行到當前語句時消耗的毫秒數(shù)

%t(thread id):當前語句所在的線程ID

%p(priority): 日志的當前優(yōu)先級別,即DEBUG、INFO、WARN…等

%c(class):當前日志對象的名稱,例如:

模式字符串為:%-10c -%m%n

代碼為:

ILog log=LogManager.GetLogger(“Exam.Log”);

log.Debug(“Hello”);

則輸出為下面的形式:

Exam.Log - Hello

%L:輸出語句所在的行號

%F:輸出語句所在的文件名

%-數(shù)字:表示該項的最小長度,如果不夠,則用空格填充

例如,轉(zhuǎn)換模式為%r [%t]%-5p %c - %m%n 的 PatternLayout 將生成類似于以下內(nèi)容的輸出:

176 [main] INFO org.foo.Bar - Located nearest gas station.

(5) 

最后,讓我們看看在Appender元素里的標簽。它定義了應(yīng)用到Appender對象的過濾器。本例中,我們使用了LevelRangeFilter過濾器,它可以只記錄LevelMin和LevelMax參數(shù)指定的日志級別之間的日志事件??梢栽谝粋€Appender上定義多個過濾器(Filter),這些過濾器將會按照它們定義的順序?qū)θ罩臼录M行過濾。其他過濾器的有關(guān)信息可以在log4net的SDK文檔中找到。

5  使用配置文件

(1)關(guān)聯(lián)配置文件

當我們創(chuàng)建了上面的配置文件后,我們接下來需要把它和我們的應(yīng)用聯(lián)系起來。缺省的,每個獨立的可執(zhí)行程序集都會定義它自己的配置。log4net框架使用 log4net.Config.DOMConfiguratorAttribute在程序集的級別上定義配置文件。

例如:可以在項目的AssemblyInfo.cs文件里添加以下的語句

 
 
 
  1. [assembly:log4net.Config.DOMConfigurator(ConfigFile="filename",   
  2. ConfigFileExtension="ext",Watch=true/false)] 

ConfigFile:指出了我們的配置文件的路徑及文件名,包括擴展名。

ConfigFileExtension:如果我們對被編譯程序的程序集使用了不同的文件擴展名,那么我們需要定義這個屬性,缺省的,程序集的配置文件擴展名為”config”。

Watch (Boolean屬性):log4net框架用這個屬性來確定是否需要在運行時監(jiān)視文件的改變。如果這個屬性為true,那么FileSystemWatcher將會被用來監(jiān)視文件的改變,重命名,刪除等事件。

其中:ConfigFile和ConfigFileExtension屬性不能同時使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config.txt”

ConfigFileExtension則是指明了和可執(zhí)行程序集同名的配置文件的擴展名,例如,應(yīng)用程序的名稱是”test.exe”,ConfigFileExtension=”txt”,則配置文件就應(yīng)該是”test.exe.txt” ;

也可以不帶參數(shù)應(yīng)用DOMConfiguratio():

 
 
 
  1. [assembly: log4net.Config.DOMConfigurator()] 

也可以在程序代碼中用DOMConfigurator類打開配置文件。類的構(gòu)造函數(shù)需要一個FileInfo對象作參數(shù),以指出要打開的配置文件名。這個方法和前面在程序集里設(shè)置屬性打開一個配置文件的效果是一樣的。

 
 
 
  1. log4net.Config.DOMConfigurator.Configure(  
  2. new FileInfo("TestLogger.Exe.Config"));  

DOMConfigurator 類還有一個方法ConfigureAndWatch(..), 用來配置框架并檢測文件的變化。

以上的步驟總結(jié)了和配置相關(guān)的各個方面,下面我們將分兩步來使用logger對象。

(2)創(chuàng)建或獲取日志對象

日志對象會使用在配置文件里定義的屬性。如果某個日志對象沒有事先在配置文件里定義,那么框架會根據(jù)繼承結(jié)構(gòu)獲取祖先節(jié)點的屬性,最終的,會從根日志獲取屬性。如下所示:

Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");

(3) 輸出日志信息

可以使用ILog的幾種方法輸出日志信息。你也可以在調(diào)用某方法前先檢查IsXXXEnabled布爾變量,再決定是否調(diào)用輸出日志信息的函數(shù),這樣可以提高程序的性能。因為框架在調(diào)用如ILog.Debug(…)這樣的函數(shù)時,也會先判斷是否滿足Level日志級別條件。

 
 
 
  1. if (log.IsDebugEnabled) log.Debug("message");  
  2. if (log.IsInfoEnabled) log.Info("message); 

6  在程序中配置log4net

除了前面講的用一個配置文件來配置log4net以外,還可以在程序中用代碼來配置log4net框架。如下面的例子:

 
 
 
  1. // 和PatternLayout一起使用FileAppender   
  2. log4net.Config.BasicConfigurator.Configure(  
  3. new log4net.Appender.FileAppender(  
  4. new log4net.Layout.PatternLayout("%d   
  5. [%t]%-5p %c [%x] - %m%n"),"testfile.log"));  
  6. // using a FileAppender with an XMLLayout  
  7. log4net.Config.BasicConfigurator.Configure(   
  8. new log4net.Appender.FileAppender(   
  9. new log4net.Layout.XMLLayout(),"testfile.xml"));  
  10. // using a ConsoleAppender with a PatternLayout  
  11. log4net.Config.BasicConfigurator.Configure(   
  12. new log4net.Appender.ConsoleAppender(  
  13. new log4net.Layout.PatternLayout("%d   
  14. [%t] %-5p %c - %m%n")));  
  15. // using a ConsoleAppender with a SimpleLayout  
  16. log4net.Config.BasicConfigurator.Configure(  
  17. new log4net.Appender.ConsoleAppender(new   
  18. log4net.Layout.SimpleLayout())); 

盡管這里用代碼配置log4net也很方便,但是你卻不能分別配置每個日志對象。所有的這些配置都是被應(yīng)用到根日志上的。

log4net.Config.BasicConfigurator 類使用靜態(tài)方法Configure 設(shè)置一個Appender 對象。而Appender的構(gòu)造函數(shù)又會相應(yīng)的要求Layout對象。你也可以不帶參數(shù)直接調(diào)用BasicConfigurator.Configure(),它會使用一個缺省的PatternLayout對象,在一個ConsoleAppender中輸出信息。如下所示:

 
 
 
  1. log4net.Config.BasicConfigurator.Configure(); 

在輸出時會顯示如下格式的信息:

0 [1688] DEBUG log1 A B C - Test

20 [1688] INFO log1 A B C - Test

當log4net框架被配置好以后,就可以如前所述使用日志功能了。

總結(jié)

使用log4net可以很方便地為應(yīng)用添加日志功能。應(yīng)用Log4net,使用者可以很精確地控制日志信息的輸出,減少了多余信息,提高了日志記錄性能。同時,通過外部配置文件,用戶可以不用重新編譯程序就能改變應(yīng)用的日志行為,使得用戶可以根據(jù)情況靈活地選擇要記錄的信息。

【編輯推薦】

  1. c#.net實體類序列化方法
  2. 對象的序列化和反序列化
  3. 用C#實現(xiàn)文件夾拷貝
  4. C#中自增、自減操作符重載是個怎么回事兒
  5. 解析C#委托、時間和Lambda表達式

分享題目:C#中l(wèi)og4Net使用方法(二)
標題網(wǎng)址:http://m.5511xx.com/article/dpdecpi.html