安裝 NLog
從官方文件 - Installing NLog 可以看見需要安裝 NLog 和 NLog.Config,但在安裝 NLog.Config 時發現該套件已經被淘汰,且 NLog.Config 現在可以透過程式產生 - Configure from code
Target 和 Rules
NLog 內的設定重點,透過兩者設定搭配來決定用哪種條件、方式來產生 Log
- Target:輸出目標,EX:Console、File、Database、WebService,詳見 官方文章 - Target
- Rules:觸發條件、時機:name、minLevel、maxLevel,詳見 官方文章 - Rules
透過 Code 來建立 NLog 設定檔並觀察不同 Target 搭配 LogLevel 的輸出結果
LogLevel 依嚴重性排序依序為:Trace、Debug、Info、Warm、Error、Fatal,下圖為 VS Intellisence 的各 LogLevel 情境說明
using NLog;
using System;
namespace NLogSample
{
internal class Program
{
// 透過 LogManager.GetCurrentClassLogger() 取得 NLog 設定檔
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
LogLevelConfig();
try
{
int numerator = 1;
int denominator = 0;
Console.WriteLine(numerator / denominator);
}
catch (Exception ex)
{
// 觸發 Target1:ErrorFile 和 Taget3:ColoredConsole
_logger.Error(ex, "輸入 Error 相關說明");
// 觸發 Target2:FatalFile 和 Taget3:ColoredConsole
_logger.Fatal(ex, "輸入 Fatal 相關說明");
// 觸發 Taget3:ColoredConsole
_logger.Trace(ex);
}
}
private static void LogLevelConfig()
{
var config = new NLog.Config.LoggingConfiguration();
// Target 1:
// 當 LogLevel = Error 時,會根據 ErrorFile 設定,把錯誤訊息輸出至 txt 檔案
var errorFile = new NLog.Targets.FileTarget("errorfile") { FileName = "ErrorFile.txt" };
config.AddRule(LogLevel.Error, LogLevel.Error, errorFile);
// Target 2:
// 當 LogLevel = Fatal 時,會根據 FatalFile 設定,把錯誤訊息輸出至 txt 檔案
var fatalFile = new NLog.Targets.FileTarget("fatalfile") { FileName = "FatalFile.txt" };
config.AddRule(LogLevel.Fatal, LogLevel.Fatal, fatalFile);
// Target 3:
// 在 console 內發生 Exception 的話,其實不會顯示錯誤訊息,特地把它顯示出來
// LogLevel.Trace 到 LogLevel.Fatal 代表任何情況都會觸發
var coloredConsole = new NLog.Targets.ColoredConsoleTarget("ColoredConsole");
config.AddRule(LogLevel.Trace, LogLevel.Fatal, coloredConsole);
LogManager.Configuration = config;
}
}
}
根據不同 LogLevel 產生 Log 到不同 File 去,自行輸入的文字也會出現在 Log 資訊內
Layouts 和 Layouts Renderers
Log 內容輸出,可以透過 Layouts 和 Layouts Renderers 來變化,該部分只介紹預設輸出
- Layouts:文字輸出格式,詳見 官方文章 - Layouts
- Layouts Renderers:內建變數,詳見 官方文章 - Layouts Renderers
預設輸出文字格式可以參考 官方文章 - TextLayout,文字格式分為四部份,以 | 符號分隔
${longdate}|${level:uppercase=true}|${logger}|${message:withexception=true}
因為有自行加入文字,所以會變成
${longdate}|${level:uppercase=true}|${logger}|文字輸入|${message:withexception=true}
沒有留言:
張貼留言