先前用過 Enterprise Library 的 Logging 套件,後來嘗試用 NLog 搭配 ServiceStack Logging 套件,覺得易學易用,就一直這麼用了。我還喜歡 NLog 的獨立組態檔,不攪和 web.config/app.confg;將來若因為某些因素須棄 NLog 而改用其他 logging 套件,切換也很容易(ServiceStack 提供)。
安裝套件
使用 NuGet 把下圖中三個紅色框框標示的套件都裝了:
完成後,專案中除了加入必要的組件參考,專案根目錄下還會多出兩個檔案:NLog.config 和 NLog.xsd。其中 NLog.config 便是用來控制 NLog 的行為,其屬性「Copy to output directory」已自動設定為 "Copy always",亦即每次建置專案都會自動複製到建置輸出目錄。
組態檔
底下是 NLog.config 的一個簡單範例,程式輸出的 log 訊息會寫入至應用程式目錄下的 Logs 子目錄,而且以「一天」作為 archive 的時間單位,將過去的 log 歸檔至應用程式目錄的 Logs\Archives 子目錄下。
組態檔設定好之後,接著便可以在程式中輸出 log 訊息。
程式碼
首先,在應用程式初始化的地方建立 logger 工廠:
如果是 Web 應用程式,可將上述動作放在 Global.asax.cs 的 Application_Start() 方法中。Windows 應用程式可在主視窗的 Load 事件中處理。
往後每當需要輸出 log,就可以透過 ServiceStack 的 LogManager 取得 logger 物件,然後呼叫該物件的 Debug()、Info()、Warn()、Error()、Fatal() 等方法來輸出訊息。
範例:
如需格式化字串,也有 *Format() 方法可用,例如 DebugFormat()、InfoFormat()...等等。
安裝套件
使用 NuGet 把下圖中三個紅色框框標示的套件都裝了:
完成後,專案中除了加入必要的組件參考,專案根目錄下還會多出兩個檔案:NLog.config 和 NLog.xsd。其中 NLog.config 便是用來控制 NLog 的行為,其屬性「Copy to output directory」已自動設定為 "Copy always",亦即每次建置專案都會自動複製到建置輸出目錄。
組態檔
底下是 NLog.config 的一個簡單範例,程式輸出的 log 訊息會寫入至應用程式目錄下的 Logs 子目錄,而且以「一天」作為 archive 的時間單位,將過去的 log 歸檔至應用程式目錄的 Logs\Archives 子目錄下。
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- See http://nlog-project.org/wiki/Configuration_file for information on customizing logging rules and outputs. --> <targets> <!-- add your targets here --> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}" fileName="${basedir}/logs/logfile.txt" archiveFileName="${basedir}/logs/archives/log.{#}.txt" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="7" concurrentWrites="true" keepFileOpen="false" encoding="iso-8859-2" /> <!-- <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> --> </targets> <rules> <!-- add your logging rules here --> <logger name="*" minlevel="Info" writeTo="file" /> <!-- <logger name="*" minlevel="Trace" writeTo="f" /> --> </rules> </nlog>
組態檔設定好之後,接著便可以在程式中輸出 log 訊息。
程式碼
首先,在應用程式初始化的地方建立 logger 工廠:
ServiceStack.Logging.LogManager.LogFactory = new ServiceStack.Logging.NLogger.NLogFactory();
如果是 Web 應用程式,可將上述動作放在 Global.asax.cs 的 Application_Start() 方法中。Windows 應用程式可在主視窗的 Load 事件中處理。
往後每當需要輸出 log,就可以透過 ServiceStack 的 LogManager 取得 logger 物件,然後呼叫該物件的 Debug()、Info()、Warn()、Error()、Fatal() 等方法來輸出訊息。
範例:
using ServiceStack.Logging; .... public class MyApiControllerBase : ApiController { protected ILog logger; public MyApiControllerBase() { logger = LogManager.GetLogger(this.GetType()); } public Foo() { logger.Info("Entering Foo()."); .... }
如需格式化字串,也有 *Format() 方法可用,例如 DebugFormat()、InfoFormat()...等等。
沒有留言: