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