NLog是一款擁有豐富的途徑選擇和管理能力的可用于.net、Silverlight和Windows Phone的免費開源架構.它可以将任何.net語言産生的調試資訊轉化為上下文資訊(包括日期和時間,嚴重程度,程序,線程,環境資訊),根據你喜好的形式發送到一個或者多個目标存儲。那麼,我們如何在一個應用程式上配置使用NLog,将日志輸出到控制台和檔案?
首先,打開VS2012建立一個控制台應用程式,添加NLog.dll引用。
在Program.cs檔案中,擷取一個Logger執行個體,取名為NLogConsoleExample(名字可任意),也可采用 LogManager.GetCurrentClassLogger()來擷取一個以目前類名為名稱的Logger執行個體;然後我們在main方法中添加幾行簡單調用NLog輸出不同級别的日志資訊的代碼,如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNyYTMxYDM5ETNxcDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
接下來,開始配置NLog配置檔案,NLog配置檔案支援兩種方式:
1)是将配置寫到應用程式的配置檔案(通常是applicationName.exe.config)或者Web.config檔案中;
2)獨配置到一個檔案,通常是NLog.config
這裡采用第一種方法,首先我們需要在配置檔案中增加如下形式的配置
<configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog> </nlog> </configuration>
在<nlog />節點中,有五個子節點可讓我們配置,前兩個節點是配置必須的,而後面的幾個是可選,可用于更進階的場景。
-
–定義日志記錄輸出的目标位置,可以配置為輸出到控制台,檔案,資料庫,事件日志等等<targets />
-
–定義日志輸出路徑規則<rules />
-
–定義從某個*.dll擷取Nlog擴充<extensions />
-
– 包含外部的配置檔案<include />
-
– 設定配置變量的值<variable />
簡單的配置如下圖,标出的序号要點在圖下方将進行講解注釋。
注釋:
- autoReload="true"表示在不重新啟動應用程式的情況下,修改配置檔案,NLog會自動加載應用;
- internalLogLevel="Trace"internalLogFile="logs/internalLog.txt"這個設定可以将NLog内部的日志消息寫到應用程式目錄下的logs檔案夾裡的internalLog.txt檔案中;(這個配置常用于調試Nlog的配置是否正确,調試完成後,最好關閉以提高性能)
-
<target>的配置:type="File|Console" 屬性是設定日志輸出目标是"File"(檔案)或者"Console"(控制台);
type="File"的時候要指定fileName屬性, fileName="${basedir}/logs/${shortdate}.log" 設定日記記錄檔案的路徑和名稱,即應用程式下的log目錄裡格式為yyyy-MM-DD.log;
layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level} ${message}" 設定日志輸出格式(可查閱官網說明).
- name="NLogConsoleExample"表示配置的規則适用于Logger名稱為“NLogConsoleExample”,如果填*,則表示所有的Logger都運用這個規則。
- minlevel="Debug"maxlevel="Error"用來配置記錄的級别為最小是"Debug"最大為"Error"(備注:此處也可以用levels="Debug,Error"來設定,說明隻輸出Debug級别以及Error級别的日志,官網此處解說有誤: )
NLog的配置和使用(一) - writeTo="t1,t2"其中t1,t2分别代表上面設定的targets名稱為t1以及t2的目标輸出,此處表示将分别将日志資訊輸出到檔案和控制台。
附上整個配置檔案的完整代碼:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> </configSections> <nlog autoReload="true" internalLogLevel="Trace" internalLogFile="logs/internalLog.txt"> <targets> <target name="t1" type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${callsite} ${level}: ${message} ${event-context:item=exception} ${stacktrace} ${event-context:item=stacktrace}"/> <target name="t2" type="Console" layout="${date:format=yyyyMMddHHmmss} ${callsite} ${level} ${message}"/> </targets> <rules> <logger name="NLogConsoleExample" minlevel="Debug" maxlevel="Error" writeTo="t1,t2" /> </rules> </nlog> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
最後示例結果顯示: 圖一:運作程式後,控制台輸出指定格式的符合設定級别(Debug到Error)的日志資訊,并且在應用程式目錄生成一個名為logs的目錄。
圖二:logs目錄下分别含有記錄Nlog内部跟蹤日志資訊的檔案internalLog.txt以及形式為yyyy-MM-DD.log的存放對應級别(Debug到Error)的日志輸出。
圖三:2016-07-15.log内容展示:
圖四:internalLog.txt内容展示:(這個檔案記錄的内容常用于調試Nlog一些配置錯誤或者其他内部錯誤)
PS:NLog 官網位址 http://nlog-project.org/