nlog轻量级日志组件
一.NLog簡(jiǎn)要介紹:????????????????????????????????????
1.NLog是一個(gè)簡(jiǎn)單靈活的.NET日志記錄類庫(kù)。通過(guò)使用NLog,我們可以在任何一種.NET語(yǔ)言中輸出帶有上下文的(contextual information)調(diào)試診斷信息,根據(jù)喜好配置其表現(xiàn)樣式之后發(fā)送到一個(gè)或多個(gè)輸出目標(biāo)(target)中。
2.NLog的API非常類似于log4net,且配置方式非常簡(jiǎn)單。NLog使用路由表(routing table)進(jìn)行配置,但log4net卻使用層次性的appender配置,這樣就讓NLog的配置文件非常容易閱讀,并便于今后維護(hù)。
3.NLog遵從BSD license,即允許商業(yè)應(yīng)用且完全開(kāi)放源代碼。任何人都可以免費(fèi)使用并對(duì)其進(jìn)行測(cè)試,然后通過(guò)郵件列表反饋問(wèn)題以及建議。
4.NLog支持.NET、C/C++以及COM interop API,因此我們的程序、組件、包括用C++/COM 編寫的遺留模塊都可以通過(guò)同一個(gè)路由引擎將信息發(fā)送至NLog中。
5.NLog的.NET API的過(guò)濾信息功能執(zhí)行效率很高,這樣我們就可以一直保留程序中的日志寫入代碼,然后由NLog在運(yùn)行時(shí)將其根據(jù)需要過(guò)濾掉。在一個(gè)1.6G單CPU筆記本電腦上,NLog每秒鐘可以過(guò)濾掉1.5億條日志寫入語(yǔ)句!加上異步處理(asynchronous processing)以及其他包裝程序(wrappers)的支持,NLog將成為一個(gè)極為強(qiáng)大的、且極具伸縮性的日志記錄工具.
二.NLog中Logger類的方法解釋:
1.?? Trace - 最常見(jiàn)的記錄信息,一般用于普通輸出
2.?? Debug - 同樣是記錄信息,不過(guò)出現(xiàn)的頻率要比Trace少一些,一般用來(lái)調(diào)試程序
3.?? Info - 信息類型的消息
4.?? Warn - 警告信息,一般用于比較重要的場(chǎng)合
5.?? Error - 錯(cuò)誤信息
6.?? Fatal - 致命異常信息。一般來(lái)講,發(fā)生致命異常之后程序?qū)o(wú)法繼續(xù)執(zhí)行。
?
以下的方法讓你決定是否將日志用于特定的等級(jí):
1.IsEnabled() –決定日志是否能用于特定的等級(jí).
2.IsTraceEnabled –決定日志是否能用于Trace這個(gè)等級(jí)
3.IsDebugEnabled – 決定日志是否能用于Debug這個(gè)等級(jí)
4.IsInfoEnabled –決定日志是否能用于Info這個(gè)等級(jí)
5.IsWarnEnabled – 決定日志是否能用于Warn這個(gè)等級(jí)
6.IsErrorEnabled – 決定日志是否能用于Error這個(gè)等級(jí)
7.IsFatalEnabled – 決定日志是否能用于Fatal這個(gè)等級(jí)
?
三. 配置文件詳細(xì)配置過(guò)程
通過(guò)在啟動(dòng)的時(shí)候?qū)σ恍┏S媚夸浀膾呙?#xff0c;NLog會(huì)嘗試使用找到的配置信息進(jìn)行自動(dòng)的自我配置。當(dāng)你運(yùn)行一個(gè)獨(dú)立的*.exe客戶端可執(zhí)行程序時(shí),NLog將在以下目錄搜索配置信息:
如果是一個(gè)ASP.NET程序,被搜索的目錄包括:
由于.NET Compact Framework不支持程序配置文件(*.exe.config)和環(huán)境變量,因此NLog將只會(huì)掃描這些地方:
?
配置文件格式
?NLog支持兩種配置文件格式
如果你選擇了第一種方式,使用的是標(biāo)準(zhǔn)的configSections這種機(jī)制,那么你的配置文件看起來(lái)差不多是這個(gè)樣子:
<configuration>
? <configSections>
??? <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
? </configSections>
? <nlog>
? </nlog>
</configuration>
單一格式的配置文件就是一個(gè)以<nlog />為根節(jié)點(diǎn)的純XMl文件。命名空間并不強(qiáng)制使用,如果使用的話我們就可以利用Visual Studio的智能感應(yīng)。
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</nlog>
需要注意的是NLog的配置文件總是大小寫敏感的,不管是在使用的時(shí)候,或者即使你沒(méi)有使用名字空間。當(dāng)然只有你的大小寫符合要求,智能感應(yīng)才能正常工作。
?
配置元素
下面這些元素可以作為<nlog />的字節(jié)點(diǎn)。列表中的前兩個(gè)元素在所有的NLog配置文件中都必須提供,其余的則可以選擇使用,通常用于一些復(fù)雜場(chǎng)景。
?
輸出目標(biāo)
<target />區(qū)域定義了日志的目標(biāo)或者說(shuō)輸出。每一個(gè)<target />元素代表一個(gè)目標(biāo)。我們需要為每一個(gè)目標(biāo)設(shè)置兩個(gè)屬性:
除了這兩個(gè)屬性,通常來(lái)說(shuō)給目標(biāo)添加一些其它參數(shù),這些屬性將會(huì)影響你在程序中如何使用診斷跟蹤語(yǔ)句(diagnostic traces)。每一個(gè)目標(biāo)都可以有一組不同的參數(shù)集合,并且參數(shù)都是上下文相關(guān)的,你可以在本項(xiàng)目的主頁(yè)上找到更多關(guān)于參數(shù)的詳細(xì)說(shuō)明。Visual Studio的智能感應(yīng)對(duì)這些參數(shù)同樣有用。
舉個(gè)例子 - “File”目標(biāo)可以使用“fileName”作為參數(shù)來(lái)定義輸出文件名,而“Console”目標(biāo)可以借助“error”參數(shù)的值來(lái)判斷是否應(yīng)該把當(dāng)前進(jìn)程的diagnostic traces結(jié)果輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr)還是標(biāo)準(zhǔn)輸出(stdout)控制臺(tái)。
下面這個(gè)例子演示了在<targets />區(qū)域同時(shí)定義多個(gè)目標(biāo):兩個(gè)files目標(biāo),一個(gè)network目標(biāo)和一個(gè)OutputDebugString目標(biāo):
<targets>
? <target name="f1" xsi:type="File" fileName="file1.txt"/>
? <target name="f2" xsi:type="File" fileName="file2.txt"/>
? <target name="n1" xsi:type="Network" address="tcp://localhost:4001"/>
? <target name="ds" xsi:type="OutputDebugString"/>
</targets>
注意:target節(jié)點(diǎn)的archiveAboveSize屬性,這個(gè)屬性比較有用,很多人不知道這個(gè)屬性。
archiveAboveSize="50000"? 表示日志文件的最大50KB,超過(guò)就新建文件,并重命名舊的文件名,舊文件名類似 xxx.0.txt, xxx.1.txt.
NLog提供了許多已經(jīng)預(yù)先定義好的目標(biāo)。關(guān)于這些目標(biāo)的詳細(xì)說(shuō)明請(qǐng)參考本項(xiàng)目的主頁(yè)。實(shí)際上,你也可以很容易的為自己創(chuàng)建目標(biāo) - 全部只需大約15-20行代碼即可,更多信息請(qǐng)參考項(xiàng)目文檔。
?
路由規(guī)則
<rules />區(qū)域定義了日志的路由規(guī)則。實(shí)際上它是一個(gè)簡(jiǎn)單的路由表,對(duì)每一個(gè)日志源/記錄者的名稱和記錄等級(jí)的組合,定義了一個(gè)日志寫入目標(biāo)列表。 表中的規(guī)則是被順序處理的。每當(dāng)遇到匹配的規(guī)則時(shí),日志信息就會(huì)被送到規(guī)則中定義的一個(gè)或多個(gè)目標(biāo)去。如果一個(gè)規(guī)則被標(biāo)識(shí)為最后一個(gè),那么其后的規(guī)則都不會(huì)被執(zhí)行。
每一個(gè)路由表項(xiàng)就是一個(gè)<logger />元素,它的可以接受的屬性有:
一些例子:
最簡(jiǎn)單的情況下,整個(gè)日志的配置信息可以只由一個(gè)<target />元素和一個(gè)<logger />規(guī)則構(gòu)成,就可以吧一定級(jí)別的日志信息路由到期望的目標(biāo)去。隨著程序不斷的變大,增加新的目標(biāo)和規(guī)則也很簡(jiǎn)單。
?
上下文信息
布局由被一個(gè)美元符號(hào)$加左大括弧“${”和一個(gè)右大括弧“}”為標(biāo)記所包圍的文本所組成。這個(gè)標(biāo)記也就是所謂的“布局生成器(layout renderers),我們可以用它來(lái)把一些上下文相關(guān)的信息插入到日志信息中。布局可以應(yīng)用在許多地方,比如可以被用在控制輸出到屏幕或?qū)懭胛募畔⒌母袷?#xff0c;也可以用在控制文件名。接下來(lái)我們會(huì)更多的了解布局的強(qiáng)大。
假設(shè)我們希望每個(gè)輸出到控制臺(tái)的信息都包含一些這些信息:
- 當(dāng)前的日期和時(shí)間
- 產(chǎn)生日志信息的類和方法的名字
- 日志等級(jí)
- 日志內(nèi)容
利用Layout來(lái)實(shí)現(xiàn)很簡(jiǎn)單:
<target name="c" xsi:type="Console"
? layout="${longdate} ${callsite} ${level} ${message}"/>
或者我們可以把每一個(gè)日志記錄者生成的日志信息輸出到一個(gè)單獨(dú)的文件里:
<target name="f" xsi:type="File" fileName="${logger}.txt"/>
這里我們看到fileName屬性的值被設(shè)置為布局生成器${logger},從而使每一條日志信息被寫到一個(gè)以日志生成者名字命名的一個(gè)文件里。上面這個(gè)例子將生成如下一系列文件:
- Name.Space.Class1.txt
- Name.Space.Class2.txt
- Name.Space.Class3.txt
- Other.Name.Space.Class1.txt
- Other.Name.Space.Class2.txt
- Other.Name.Space.Class3.txt
- ...
有一個(gè)常見(jiàn)需求是能夠用日期信息來(lái)區(qū)分日志文件。如果使用${shortdate}布局生成器,這簡(jiǎn)直太容易了:
<target name="f" xsi:type="File" fileName="${shortdate}.txt"/>
那么可以給每一個(gè)職員生成一個(gè)日志文件嗎?答案就是${windows-identity}布局生成器:
<target name="f" xsi:type="File" fileName="${windows-identity:domain=false}.txt"/>
這樣我們就能夠給每一個(gè)職員生成一個(gè)日志文件了:
轉(zhuǎn)載于:https://www.cnblogs.com/rainnight/archive/2010/10/20/1856478.html
總結(jié)
以上是生活随笔為你收集整理的nlog轻量级日志组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#与.NET程序员面试宝典 1.3
- 下一篇: 【转】wordpress/wp-incl