首頁 C# 使用Nlog撰寫Logger日誌
文章
Cancel

C# 使用Nlog撰寫Logger日誌

前言

因為有時候

安裝套件

NLog

Desktop View

1
NuGet\Install-Package NLog -Version 5.1.1

NLog.Config

Desktop View

1
NuGet\Install-Package NLog.Config -Version 4.7.15

NLog.Schema

Desktop View

1
NuGet\Install-Package NLog.Schema -Version 4.7.15

編輯NLog.config

載完NLog套件時,會出現NLog.config

編輯其內容,可以根據設定Log的嚴重程度,決定儲存Log的方式

Desktop View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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="LogFileSaveFolderPath" value="${basedir}/Logs/${shortdate}/"/>
    <variable name="LogFilePath" value="${LogFileSaveFolderPath}/${logger}.log"/>
    <variable name="LogFileFatalPath" value="${LogFileSaveFolderPath}/FatalFile.log"/>

    <!--[設定] 寫入目標-->
    <targets>
	    <target name="File" xsi:type="File" fileName="${LogFilePath}" layout="${Layout}"
			    encoding="utf-8" maxArchiveFiles="30" archiveNumbering="Sequence"
			    archiveAboveSize="1048576" archiveFileName="${LogFileSaveFolderPath}/${logger}.log{#######}" />
	    <target name="FileFatal" xsi:type="File" fileName="${LogFileFatalPath}" layout="${LayoutFatal}"
			    encoding="utf-8" maxArchiveFiles="30" archiveNumbering="Sequence"
			    archiveAboveSize="1048576" archiveFileName="${LogFileSaveFolderPath}/FatalFile.log{#######}" />
	    <target name="EventLog" xsi:type="EventLog" source="NLogLogger" log="Application"
			    layout="${date}| ${level} | ${message}"/>
    </targets>

    <!--[設定] 紀錄規則-->
    <rules>
	    <logger name="*" levels="Trace,Debug" writeTo="File" />
	    <logger name="*" levels="Info" writeTo="File" />
	    <logger name="*" levels="Warn" writeTo="File" />
	    <logger name="*" levels="Error,Fatal" writeTo="FileFatal" />
	    <logger name="*" levels="Fatal" writeTo="EventLog" />
    </rules>

</nlog>

執行紀錄Log的程式

紀錄Log的指令像這樣

Desktop View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using NLog;
namespace ConsoleApp6
{

    internal class Program
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            logger.Trace("我是追蹤:Trace");
            logger.Debug("我是偵錯:Debug");
            logger.Info("我是資訊:Info");
            logger.Warn("我是警告:Warn");
            logger.Error("我是錯誤:error");
            logger.Fatal("我是致命錯誤:Fatal");
        }
    }
}

Log紀錄位置

根據NLog.config的描述,產生的Log文件「位置」

Desktop View

根據NLog.config的描述,產生的Log文件「內容」

Desktop View

根據NLog.config的描述,產生的「事件檢視器」的紀錄

備註寫入Log時,須注意有無權限,例如「事件檢視器」就一定要用最高權限

Desktop View

參考

https://kevintsengtw.blogspot.com/2011/10/nlog-advanced-net-logging-1.html
https://learningcoding.coderbridge.io/2020/02/13/NLog/
https://dotblogs.com.tw/stanley14/2017/02/15/nlog

本文由作者按照 CC BY 4.0 進行授權