1. 程式人生 > 其它 >專案中的NLog日誌記錄

專案中的NLog日誌記錄

日誌服務記錄到大多數程式執行操作記錄,一個好的程式必須要有一個好的日誌服務以確定程式服務的正常執行做有效的排查自檢工作。

NLoger日誌服務

NLoger日誌服務是一個開源的C#日誌服務外掛包,作為一個工具類裡面有強大的日誌記錄功能,只需要簡單的配置就可以在專案中順利的執行它。記錄形式更是多種多樣。
相比於LogNet4其專案佔比空間更小不需要過多的配置即可執行的專案中,實現日誌服務,讓使用者更多的關注於專案本身,不在為日誌記錄所煩惱

並且NLog可以執行幾乎所有的.net 平臺上,做了足夠多的相容,不用應為.net core,window8而感到焦慮

專案中的NLoger配置設定

首先先搭建一個測試環境,這裡使用的是一個簡單的Windows服務中編寫一個定時器實現NLoger日誌在專案中的配置的說明。

  1. 新建測試專案
    開啟Visual Studio 開發工具,新建專案“Windows 服務”

名稱隨意起一個自己想要的程式服務
2. 在專案中新增NLoger
新建完成後在側邊欄選中專案右鍵選擇GUn裡NuGet程式包,搜尋NLog

選擇新增NLog、NLog.Schems、NLog.Config程式集
NLog:為日誌服務的核心業務,支援多種平臺並
NLog.Schems:為日誌服務結構
NLog.config:為日誌服務篇日誌檔案,日誌服務的路徑模板皆在次檔案中進行被指修改
安裝後的專案

專案中新新增的兩個檔案NLog.config和NLog.xsd檔案本篇文章主要關注的是配置檔案的
3. NLog.config中的配置檔案說明
開啟Nlog.comfig檔案會看到其中有很多預設的配置和一些說明,這裡不做過多的介紹,主要看被註釋掉的兩個部分把其中解除註釋

效果如下

<targets>
    <!--其中設定的為日誌的輸出格式 xsi:type="File" 這裡可以設定成 colorconsole(控制檯),database(資料庫) 這裡不做過多介紹,如有興趣請參考官方文件 -->
   <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} |${logger}: ${uppercase:${level}} ${message}|${exception:format=message}" />
    <!--
        filename:檔案路徑名名稱
        layout:檔案輸出模板
        更多設定請參見官方文件教程
    -->
  </targets>

  <rules>
  <!--logger 日誌角色名稱 minlevel 最小級別 級別分為 debug 、info等集中型別 writeTo 使用資料模板名稱 -->
    <logger name="*" minlevel="Debug" writeTo="f" />    
  </rules>
  1. Window服務程式部分

專案根目錄下選中Service1.cs開啟設計介面滑鼠右鍵選擇新增安裝程式

專案中根目錄下新新增projectinstall.cs單擊檔案開啟設計介面,介面中出現serviceProcessInstaller1serviceInstaller1兩個檔案
選中ServiceInstaller1滑鼠右鍵開啟屬性介面設定服務程式

設計中:
(name):當前安裝程式功能名稱
雜項:
DelayedAutoStart:設定服務程式自啟動
Description:服務描述展現在服務列表的描述列
DisplayName:服務展示名稱
Parent:安裝程式名稱
SerivceName:安裝程式名稱
其他項預設即可
serviceProcessInstaller1滑鼠右鍵進入屬性將Account 選項修改為LocalSystem

service1.cs類程式碼部分

using System.ServiceProcess;
using System.Threading;
using System.Threading.Tasks;
using NLog;
namespace NLogerTest
{
    public partial class NLogerService : ServiceBase
    {
        //宣告日誌服務類
        private readonly Logger _nloger = LogManager.GetCurrentClassLogger();
        //宣告服務執行緒token
        private CancellationTokenSource cancellation;
        public NLogerService()
        {
            InitializeComponent();
            //載入完成後記錄日誌
            _nloger.Info("載入: 日誌服務已經準備就緒!");
        }
        //啟動服務
        protected override void OnStart(string[] args)
        {
            //
            _nloger.Info("啟動: 日誌服務正在啟動 請稍後...");

            _nloger.Info("啟動: NLoger日誌服務已啟動");
            cancellation = new CancellationTokenSource();
            //使用執行緒工廠開啟新執行緒
            Task.Factory.StartNew(AutoLogger, cancellation.Token);
        }
        //暫停服務
        protected override void OnStop()
        {
            //取消token
            cancellation.Cancel();
            //釋放token
            cancellation.Dispose();
            //記錄停止輸出
            _nloger.Info("停止: NLoger服務已暫停");
        }
        //記錄日誌服務
        public void AutoLogger()
        {
            //判斷token是否有效
            while (!cancellation.IsCancellationRequested)
            {
                _nloger.Info("日誌成功執行");
                //執行後執行緒睡眠1分鐘
                Thread.Sleep(60*1000);
            }
        }

    }
}

編寫號程式碼後選中選專案點選生成即可
以上為window服務程式碼部分

  1. 安裝程式測試結果

本次安裝程式使用windows自帶的InstallUtil.exe程式安裝服務其儲存目錄為C:\Windows\Microsoft.NET\Framework64\v4.0.30319

找到計算中命令提示符滑鼠右鍵以管理員身份執行導航到InstallUtil.exe目錄下 輸入命令 installutil.exe 程式生成目錄\NLogerTest\bin\Release\NLogerTest.exe

出現類似資訊證明服務安裝成功
即可在服務中找到相應的服務程式名稱

選中服務點選執行即可
解除安裝對應服務命令

installutil.exe -u 程式生成目錄\NLogerTest\bin\Release\NLogerTest.exe

檢視日誌輸出:如圖 執行結果和預定設定的一樣

總結

日誌服務在程式佔據很重要的地位一個好的日誌服務在程式設計定位錯誤輸出的地方起到很關鍵的作用,省去大部分的程式碼debug流程,NLog日誌小而輕非常適合小團隊小專案整合敏捷開發,不需要過多的配置變可以執行在專案中