ASP.NET Core -NLog

1.安装NuGet包

 

2.准备Nlog的配置文件 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"
      throwExceptions="false"
      internalLogLevel="Info" internalLogFile="internal-nlog.txt">

    <!-- 定义日志输出目标 -->
    <targets>
        <target name="FileError" xsi:type="File"  fileName="${basedir}/Logs/Error/${var:logfilename}_Error.txt"
                layout="${longdate} ${level:uppercase=true} ${message} ${exception}" archiveEvery="Day" archiveAboveSize="10240" maxArchiveFiles="20" 
                archiveNumbering="Date" archiveDateFormat="yyyy-MM-ddTHH"
                archiveFileName="${basedir}/Logs/Error/${var:logfilename}_Error.{#}.txt" />

        <target name="FileWarn" xsi:type="File" fileName="${basedir}/Logs/Warn/${var:logfilename}_Warn.txt" layout="${longdate} ${message}"
                archiveEvery="Day" archiveAboveSize="10240" maxArchiveFiles="20" archiveNumbering="Date" archiveDateFormat="yyyy-MM-ddTHH" archiveFileName="${basedir}/Logs/Warn/${var:logfilename}_Warn.{#}.txt" />
        
        <target name="FileInfo" xsi:type="File" fileName="${basedir}/Logs/Info/${var:logfilename}_Info.txt" layout="${longdate} ${message}"
                archiveEvery="Day" archiveAboveSize="10240" maxArchiveFiles="20" archiveNumbering="Date" archiveDateFormat="yyyy-MM-ddTHH" archiveFileName="${basedir}/Logs/Info/${var:logfilename}_Info.{#}.txt" />
        
        <target name="FileDebug" xsi:type="File" fileName="${basedir}/Logs/Debug/${var:logfilename}_Debug.txt" layout="${longdate} ${message}"
                archiveEvery="Day" archiveAboveSize="10240" maxArchiveFiles="20"  archiveNumbering="Date" archiveDateFormat="yyyy-MM-ddTHH"  archiveFileName="${basedir}/Logs/Debug/${var:logfilename}_Debug.{#}.txt"/>
    </targets>

    <!-- 定义日志规则 -->
    <rules>
        <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="FileError" />
        <logger name="*" level="Warn"  writeTo="FileWarn" />
        <logger name="*" level="Info"  writeTo="FileInfo" />
        <logger name="*" level="Debug"  writeTo="FileDebug" />
    </rules>
</nlog>

Targets 配置项

用于定义日志输出文件的格式、输出位置等方面内容

  • maxArchiveFiles:允许生成的副本文件最大数量

  • archiveAboveSize:允许单个文件得最大容量 (如设置为10240则为10kb,超出大小就按存档命名规则自动存档)

  • archiveEvery:指示是否在每次指定时间过后自动存档日志文件(如:值为Day表示按天存档日志文件)

  • archiveNumbering:用于定义归档日志文件的编号方式(如:值为Date表示按日期编号文件,日期格式可设置archiveDateFormat)

  • archiveDateFormat:指定归档日志文件的日期格式通常用于archiveNumbering、archiveEvery

  • name:输出目标的名称,用于rules中路由规则writeTo指定

  • fileName:包含完整的生成文件的路径和文件名

  • layout:用来规定输出内容格式,语法“${属性}”,可以把上下文信息插入到日志中

Rules

用于定义不同日志等级,且输出与target 中定义的哪个文件格式下

  • name:匹配记录器对象的记录器名称 - 可能包含通配符(* 和 ?)

  • minlevel:日志记录最低等级

  • maxlevel:日志记录最大等级

  • level:单级日志记录

  • levels:以逗号分隔的要记录的级别列表

  • writeTo:日志输出,以逗号分隔的要写入的目标列表,与target的name对应

  • enabled:设置为False禁用规则,默认为True

 

 3.添加注入NLog服务的扩展

 private static string LogPath
 {
     get
     {
         return Path.Combine(AppContext.BaseDirectory, "nlog.config");
     }
 }
 public static ILoggingBuilder AddNLog(this ILoggingBuilder log,string? filename=null)
 {
     //删除其他的日志记录提供程序
     log.ClearProviders();
     #region 手动加载配置方式
     //显示加载NLog配置
     LogManager.Configuration.LogFactory.Setup().LoadConfigurationFromFile(LogPath);
//设置配置变量值,对应配置文件中archiveFileName属性中的变量logfilename LogManager.Configuration.Variables[
"logfilename"] = filename; //启用NLog作为日志记录的提供程序 log.AddNLogWeb(LogManager.Configuration); #endregion #region 自动加载配置 //log.AddNLogWeb(); #endregion return log; }

 注:

1.启动时,NLog 会自动在各种文件中搜索其配置,如下所述。它加载找到的第一个 nlog 配置。当找到第一个 nlog 配置时,搜索结束。如果未找到配置,NLog 将不会执行任何日志记录。以上的方式可以去掉手动加载配置

2.Variables 可定义变量值用于配置文件

 

 

4.Program.cs注入NLog服务

//日志
builder.Logging.AddNLog();

 

5.使用

[ApiController]
[Route("[controller]")]
public class UserController(ILogger<UserController> logger) : ControllerBase
{
    [HttpGet("GetUserExit")]
    public void GetUserExit(string account)
    {
        logger.LogInformation("调用方法->GetUserExit");
    }
}

 

针对无法使用构造函数依赖注入使用日志的,建立如下Helper

public class LogHelper
{
    private static string logPath
    {
        get { return Path.Combine(AppContext.BaseDirectory, "nlog.config"); }
    }

    private static ISetupBuilder _factory = LogManager.Configuration.LogFactory.Setup().LoadConfigurationFromFile(logPath);
    private static Logger _logger = null;
    /// <summary>
    /// 日志操作对象
    /// </summary>
    public static Logger Log
    {
        get
        {
            if (_logger == null) _logger = _factory.LogFactory.GetCurrentClassLogger();
            return _logger;
        }
    }

}

如在Program中调用

 

posted @ 2024-07-17 15:46  流年sugar  阅读(38)  评论(0编辑  收藏  举报