asp NLog範例
透過NLog.config來設定一切資訊,包括Log寫入目標(文字檔、系統事件、資料庫...)與Log層級設定,使用者可自由搭配不同Log層級與寫入目標的關聯性,實現特定訊息特定記載目標的呈現方式。
1. 在專案中透過NuGet取得NLog Configration(自動相依下載NLog)套件。
2. 產生NLog.config檔案。
3. 編輯NLog.config檔案
設定檔內容:
1. 文字樣板
NLog提供了許多的資訊標籤(如: 事件等級、發出訊息所在類別名稱...等)供開發者依需求自行組裝
2. 寫入目標
可以是文字檔、Windows事件、資料庫...等許多不同位置,當然目標不同所需的設定也不同。
3. 紀錄規則
自行搭配事件等級與寫入目標,如: Error等級寫入文字檔、Fatal等級寫入Windows事件...
範例如下:
NLog.config:
<?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" autoReload="true">
<!--[變數] 文字樣板 -->
<variable name="Layout" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}"/>
<variable name="LayoutFatal" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} | ${exception:format=tostring} ${newline}"/>
<!--[變數] 檔案位置 -->
<variable name="LogTxtDir" value="${basedir}/App_Data/Logs/${shortdate}/"/>
<variable name="LogTxtLocation" value="${LogTxtDir}/${logger}.log"/>
<variable name="LogTxtLocationFatal" value="${LogTxtDir}/FatalFile.log"/>
<!--[設定] 寫入目標-->
<targets>
<target name="File" xsi:type="File" fileName="${LogTxtLocation}" layout="${Layout}"
encoding="utf-8" maxArchiveFiles="30" archiveNumbering="Sequence"
archiveAboveSize="1048576" archiveFileName="${LogTxtDir}/${logger}.log{#######}" />
<target name="FileFatal" xsi:type="File" fileName="${LogTxtLocationFatal}" layout="${LayoutFatal}"
encoding="utf-8" maxArchiveFiles="30" archiveNumbering="Sequence"
archiveAboveSize="1048576" archiveFileName="${LogTxtDir}/FatalFile.log{#######}" />
</targets>
<!--[設定] 紀錄規則-->
<rules>
<logger name="*" levels="Trace,Debug,Info,Warn" writeTo="File" />
<logger name="*" levels="Error,Fatal" writeTo="FileFatal" />
</rules>
</nlog>
Program.cs:
using NLog;
using System;
namespace LogTest
{
class Program
{
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
try
{
// log here
logger.Trace("Trace");
logger.Debug("Debug");
logger.Info("Info");
logger.Warn("Warn");
logger.Error("Error");
logger.Fatal("Fatal");
int div = 0;
div /= div; //故意讓系統出現例外
}
catch (Exception ex)
{
// log with exception here
logger.Trace(ex, "Trace");
logger.Debug(ex, "Debug");
logger.Info(ex, "Info");
logger.Warn(ex, "Warn");
logger.Error(ex, "Error");
logger.Fatal(ex, "Fatal");
}
}
}
}
參考資料:http://b00.tw/_Ay6-
留言
張貼留言