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

posted @ 2024-05-11 10:33  sun8134  阅读(416)  评论(0编辑  收藏  举报
分享按钮