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");

            }
        }
    }
}

留言

熱門文章