ASP.NET 8 使用 NLog

NLog:https://github.com/NLog/NLog


詳細使用可以看官方Wiki:https://github.com/NLog/NLog/wiki



首先 Nuget:


Install-Package NLog

Install-Package NLog.Web.AspNetCore


然後添加一個 Config 文件,用於配置 NLog

<?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"
      internalLogLevel="Info"
      internalLogFile="${basedir}/Logs/internal-nlog/internal-nlog-AspNetCore.txt">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <targets>
    <target name="AllLog" xsi:type="File" fileName="${basedir}/Logs/Log/${shortdate}.txt"/>
    <target name="TraceLog" xsi:type="File" fileName="${basedir}/Logs/Trace/${shortdate}.txt"/>
    <target name="DebugLog" xsi:type="File" fileName="${basedir}/Logs/Debug/${shortdate}.txt"/>
    <target name="ErrorLog" xsi:type="File" fileName="${basedir}/Logs/Error/${shortdate}.txt"/>
  </targets>

  <rules>
    <logger name="Microsoft.AspNetCore.Mvc.*" minlevel="Trace" maxlevel="Info" final="true" />
    <logger name="Microsoft.AspNetCore.Routing.*" minlevel="Trace" maxlevel="Info" final="true" />
    <logger name="Microsoft.AspNetCore.Hosting.*" minlevel="Trace" maxlevel="Info" final="true" />
    <logger name="Microsoft.*" minlevel="Trace" maxlevel="Debug" final="true" />
    <logger name="Microsoft.*" minlevel="Info" writeTo="AllLog" final="true" />
    <logger name="*" minlevel="Info" maxlevel="Fatal" writeTo="AllLog" />
    <logger name="*" levels="Debug" writeTo="DebugLog" />
    <logger name="*" levels="Trace" writeTo="TraceLog" />
    <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="ErrorLog" />
  </rules>
</nlog>



簡單配置,其實比較簡單

首先是 NLog 的一些配置

比如是否自動重載、NLog自己的日誌記錄級別及文件位置


targets:指定日誌寫入的方式,比如文件、數據庫、日誌服務器等等,這裏就用了文件

rules:指定什麼級別的日誌,寫入要求的 target 中


這裏我定義裏四種 target

AllLog 用來記錄所有 Info 以上的信息

TraceLog 用來記錄 Trace 信息

DebugLog 用來記錄 Debug 信息

ErrorLog 用來記錄 Error 以上的信息


下面在 rules 裏進行具體的配置

首先是屏蔽一些 Microsoft 自身的日誌輸出

比如這裏我屏蔽掉了 Microsoft.AspNetCore.Mvc、Routing、Hosting 從 Trace 到 Info 的日誌

加上 final="true" ,表示這類日誌在後續的 rules 裏不再繼續處理

然後指定對應級別的日誌,寫入到對應的 target 指定的的文件中


然後在 Program 中啓用 NLog

            #region 加載 NLOG

            builder.Logging.ClearProviders();
            builder.Logging.AddNLog("Config/NLog.config");
            builder.Host.UseNLog();

            #endregion



然後在控制器裏面嘗試寫入日誌:

        public IActionResult Index()
        {
            _logger.LogDebug("LogDebug");
            _logger.LogTrace("LogTrace");
            _logger.LogInformation("LogInformation");
            _logger.LogWarning("LogWarning");
            _logger.LogError("LogError");
            _logger.LogCritical("LogCritical");

            return View();
        }



運行看下日誌效果,主日誌裏成功記錄了 Info 以上的信息:

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章