• NLog详解


    目录

    1.简介

    2.项目中使用NLog

    2.1 快速使用NLog

    2.2 通过配置文件使用NLog

    3.NLog配置参数详解

    3.1 全局配置

    3.2 根元素

    3.2.1 targets

    3.2.1.1 layout

    3.2.2 rules

    3.2.3 extensions

    3.2.4 include

    3.2.5 variable

    4.附录


    1.简介

    NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。

    NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。

    NLog的API非常类似于log4net,且配置方式非常简单。NLog使用路由表(routing table)进行配置,但log4net却使用层次性的appender配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。

    官网:NLog

    文档地址:Home · NLog/NLog Wiki · GitHub

    2.项目中使用NLog

    首先使用VS2022创建基于.Net6的WebApi项目MyNLog,然后项目中创建类库项目MyNLog.Utils

    2.1 快速使用NLog

    1)MyNLog.Utils项目,从nuget中引入NLog

    2) MyNLog.Utils项目中创建类NLogService.cs,使用NLog最简单的方法写日志

    1. using NLog;
    2. namespace MyNLog.Utils
    3. {
    4. public class NLogService
    5. {
    6. ///
    7. /// 写日志
    8. ///
    9. ///
    10. public static void WriteLog(string content)
    11. {
    12. var config = new NLog.Config.LoggingConfiguration();// 创建一个配置文件对象
    13. //创建日志写入目的地
    14. var logfile = new NLog.Targets.FileTarget("logfile") { FileName = $"logs/{DateTime.Now.ToString("yyyy-MM-dd")}.txt" };
    15. //添加日志路由规则
    16. config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
    17. //配置文件生效
    18. LogManager.Configuration = config;
    19. //创建日志记录对象方式1
    20. Logger Logger = LogManager.GetCurrentClassLogger();
    21. //创建日志记录对象方式2,手动命名
    22. //Logger Logger2 = LogManager.GetLogger("MyLogger");
    23. //打出日志
    24. Logger.Info(content);
    25. }
    26. }
    27. }

    3)项目 MyNLog中引用MyNLog.Utils项目,然后在WeatherForecastController中调用日志写入方法

    1. using Microsoft.AspNetCore.Mvc;
    2. namespace MyNLog.Controllers
    3. {
    4. [ApiController]
    5. [Route("[controller]")]
    6. public class WeatherForecastController : ControllerBase
    7. {
    8. private static readonly string[] Summaries = new[]
    9. {
    10. "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    11. };
    12. //private readonly ILogger _logger;
    13. //public WeatherForecastController(ILogger logger)
    14. //{
    15. // _logger = logger;
    16. //}
    17. [HttpGet(Name = "GetWeatherForecast")]
    18. public IEnumerable Get()
    19. {
    20. MyNLog.Utils.NLogService.WriteLog("Hello NLog");//写日志
    21. return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    22. {
    23. Date = DateTime.Now.AddDays(index),
    24. TemperatureC = Random.Shared.Next(-20, 55),
    25. Summary = Summaries[Random.Shared.Next(Summaries.Length)]
    26. })
    27. .ToArray();
    28. }
    29. }
    30. }

    4)启动项目,Swagger中调用接口,会在bin/Debug/net6.0/logs中看见写入的日志

    2.2 通过配置文件使用NLog

    参见 Getting started with ASP.NET Core 6 · NLog/NLog Wiki · GitHub

    1)修改NLogService中的代码

    1. using System;
    2. using System.Diagnostics;
    3. using System.IO;
    4. using System.Reflection;
    5. using System.Xml;
    6. using NLog.Config;
    7. using NLog;
    8. namespace MyNLog.Utils
    9. {
    10. public class NLogService
    11. {
    12. private static ILogger _logger;
    13. ///
    14. ///
    15. ///
    16. static NLogService()
    17. {
    18. //判断配置文件NLog.config是否存在
    19. bool flag = File.Exists(Path.Combine(Path.GetDirectoryName(typeof(NLogService).Assembly.Location), "NLog.config"));
    20. //获取配置信息
    21. LogManager.Configuration = GetXmlLoggingConfiguration(!flag);
    22. }
    23. ///
    24. ///
    25. ///
    26. private NLogService()
    27. {
    28. }
    29. ///
    30. /// logger 初始化
    31. ///
    32. private static void SetLogger()
    33. {
    34. StackFrame stackFrame = new StackFrame(2, false);
    35. MethodBase method = stackFrame.GetMethod();
    36. _logger = LogManager.GetLogger(string.Format("{0}.{1}", method.DeclaringType, method.Name));
    37. }
    38. ///
    39. /// 获取logger 配置信息
    40. ///
    41. ///
    42. ///
    43. public static XmlLoggingConfiguration GetXmlLoggingConfiguration(bool fromManifestResource = true)
    44. {
    45. XmlLoggingConfiguration result;
    46. if (fromManifestResource)
    47. {
    48. Type declaringType = MethodBase.GetCurrentMethod().DeclaringType;
    49. string text = ((declaringType != null) ? declaringType.Namespace : null) ?? "Logging.NLog";
    50. Assembly executingAssembly = Assembly.GetExecutingAssembly();
    51. Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(text + ".nlog.config");
    52. XmlTextReader xmlTextReader = new XmlTextReader(manifestResourceStream);
    53. result = new XmlLoggingConfiguration(xmlTextReader);
    54. }
    55. else
    56. {
    57. string text2 = Path.Combine(Path.GetDirectoryName(typeof(NLogService).Assembly.Location), "nlog.config");
    58. bool flag = !File.Exists(text2);
    59. if (flag)
    60. {
    61. throw new FileNotFoundException("nlog.config文件未找到。");
    62. }
    63. result = new XmlLoggingConfiguration(new FileInfo(text2).FullName);
    64. }
    65. return result;
    66. }
    67. ///
    68. /// write info log
    69. ///
    70. ///
    71. public static void Info(string msg)
    72. {
    73. SetLogger();
    74. _logger.Info(msg);
    75. }
    76. ///
    77. /// write warn log
    78. ///
    79. ///
    80. public static void Warn(string msg)
    81. {
    82. SetLogger();
    83. _logger.Warn(msg);
    84. }
    85. ///
    86. /// write debug log
    87. ///
    88. ///
    89. public static void Debug(string msg)
    90. {
    91. SetLogger();
    92. _logger.Debug(msg);
    93. }
    94. ///
    95. /// write error log
    96. ///
    97. ///
    98. public static void Error(string msg)
    99. {
    100. SetLogger();
    101. _logger.Error(msg);
    102. }
    103. ///
    104. /// write exception log
    105. ///
    106. ///
    107. public static void Exception(Exception e)
    108. {
    109. SetLogger();
    110. _logger.Error(e);
    111. }
    112. }
    113. }

    2)接口启动项目中,新增NLog.config配置文件

    1. "1.0" encoding="utf-8" ?>
    2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
    5. autoReload="true"
    6. internalLogLevel="Info"
    7. internalLogFile="nlog-internal.log">
    8. <variable name="logDir" value="${basedir}/nlogs/${date:format=yyyyMMdd}/${level}.log"/>
    9. <extensions>
    10. <add assembly="NLog.Web.AspNetCore" />
    11. extensions>
    12. <targets async="true">
    13. <target name="allfile" xsi:type="File"
    14. fileName="${basedir}/adminlogs/all.txt"
    15. archiveFileName="${basedir}/adminlogs/all.{###}.txt"
    16. archiveEvery="Day"
    17. archiveNumbering="DateAndSequence"
    18. archiveAboveSize="20000000"
    19. maxArchiveFiles="30"
    20. keepFileOpen="true"
    21. layout="${longdate} | ${event-properties:item=EventId_Id} | ${uppercase:${level}} | ${logger} | ${aspnet-request-iP:CheckForwardedForHeader=true} | ${event-properties:item=user} | ${aspnet-request-url} | ${message} | ${event-properties:item=requestParam} | ${event-properties:item=jsonResult} | ${onexception:${exception:format=tostring}"/>
    22. <target name="sqlfile" xsi:type="File"
    23. fileName="${basedir}/adminlogs/all-sql.txt"
    24. archiveFileName="${basedir}/adminlogs/all.sql{###}.txt"
    25. archiveEvery="Day"
    26. archiveNumbering="DateAndSequence"
    27. archiveAboveSize="20000000"
    28. maxArchiveFiles="30"
    29. keepFileOpen="false"
    30. layout="===========================================${newline} ${longdate} - ${aspnet-request-iP} - ${aspnet-request-headers:HeaderNames=userid} - ${aspnet-request-url} ${newline} ${message}"/>
    31. <target name="console" xsi:type="ColoredConsole" layout="${date:format=MM-dd HH\:mm\:ss} | ${uppercase:${level}} | ${logger} | ${aspnet-request-iP} | ${aspnet-request-url} | ${message}"/>
    32. <target name="consoleSql" xsi:type="ColoredConsole" layout="${date:format=MM-dd HH\:mm\:ss} | ${aspnet-request-url} ${newline} ${message}"/>
    33. <target name="blackhole" xsi:type="Null" />
    34. targets>
    35. <rules>
    36. <logger name="*" minlevel="Trace" writeTo="allfile" />
    37. <logger name="*" minLevel="Debug" writeTo="console"/>
    38. <logger name="Microsoft.*" writeTo="blackhole" final="true" />
    39. rules>
    40. nlog>

    项目运行后的日志:

     

    3.NLog配置参数详解

    关于配置文件相关参数说明参见:https://github.com/NLog/NLog/wiki/Configuration-file

    3.1 全局配置

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
          autoReload="true"
          internalLogLevel="Info"
          internalLogFile="nlog-internal.log">

     

    参数名称说明参数值
    autoReload修改配置文件后是否允许自动加载无须重启程序true/false
    throwExceptions内部日志系统抛出异常true/false
    internalLogLevel可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭

    Trace|Debug|Info|Warn|Error|Fatal

    Off为关闭

    internalLogFile把内部的调试和异常信息写入指定的文件指定路径下的文件名称,自定义

    3.2 根元素

    在配置文件的根元素中,我们可以指定如下的子元素。其中前两个是必须设定的,其余三个为可选设定。
    
    • targets:定义日志的输出目标
    • rules:定义对日志信息的路由规则
    • extensions:定义从其他dll文件中加载的NLog扩展模块
    • include:引入外部的配置文件
    • variable:定义配置文件中用到的变量

    3.2.1 targets

    1. <targets async="true">
    2. <target name="allfile" xsi:type="File"
    3. fileName="${basedir}/adminlogs/all.txt"
    4. archiveFileName="${basedir}/adminlogs/all.{###}.txt"
    5. archiveEvery="Day"
    6. archiveNumbering="DateAndSequence"
    7. archiveAboveSize="20000000"
    8. maxArchiveFiles="30"
    9. keepFileOpen="true"
    10. layout="${longdate} | ${event-properties:item=EventId_Id} | ${uppercase:${level}} | ${logger} | ${aspnet-request-iP:CheckForwardedForHeader=true} | ${event-properties:item=user} | ${aspnet-request-url} | ${message} | ${event-properties:item=requestParam} | ${event-properties:item=jsonResult} | ${onexception:${exception:format=tostring}"/>
    11. targets>

     Nlog允许用户配置单个文件大小, 放置在内容过长效率过慢,配置了大小之后, Nlog会自动创建一个新的文件副本,插入新的日志输出。

    常用的参数配置说明:

    参数名说明备注
    name输出目标的名称,用于rules中路由规则writeTo指定
    layout用来规定输出内容格式,语法“${属性}”,可以把上下文信息插入到日志中详情参见3.2.1.1layout
    xsi:type输出类型
    fileName包含完整的生成文件的路径和文件名以下值使NLog根据应用程序运行目录中的日志级别将日志事件写入文件${basedir}/${level}.log所有调试消息将转到Debug.log,所有信息消息将转到Info.log,依此类推。您可以组合任意数量的布局渲染器来生成任意的日志文件名
    maxArchiveFiles应保留的存档文件的最大数量
    archiveAboveSize日志文件将自动存档的大小(以字节为单位)
    archiveEvery

    指示是否在每次指定时间过后自动存档日志文件

    targets更多参数配置参见:File target · NLog/NLog Wiki · GitHub

    3.2.1.1 layout

    layout参数配置用来规定输出内容格式,必填项及默认值:${longdate}|${level:uppercase=true}|${logger}|${message:withexception=true}

    • $ {cached} -  将缓存应用于另一个布局输出。
    • $ {db-null} - 为数据库渲染DbNull
    • $ {exception} - 通过调用Logger方法之一提供的异常信息
    • $ {level} - 日志级别(例如ERROR,DEBUG)或级别序数(数字)
    • $ {literal} - 字符串文字。(文本)-有用,以逃避括号
    • $ {logger} - 记录器名称。GetLogger,GetCurrentClassLogger等
    • $ {message} - (格式化的)日志消息。
    • $ {newline} - 换行文字。
    • $ {object-path} -  渲染对象的(嵌套)属性
    • $ {onexception} -  仅在为日志消息定义了异常时才输出内部布局。
    • $ {var} - 渲染变量

    呼叫站点和堆栈跟踪

    • $ {callsite} - 调用站点(类名,方法名和源信息)
    • $ {callsite-linenumber} - 呼叫站点源行号。
    • $ {stacktrace} - 渲染堆栈跟踪

    条件

    • $ {when} -  仅在满足指定条件时输出内部布局。
    • $ {whenempty} -  当内部布局产生空结果时,输出替代布局。

    上下文信息

    • $ {activityid} - 将System.Diagnostics跟踪关联ID记录到日志中。
    • $ {all-event-properties} - 记录所有事件上下文数据。
    • $ {event-context} -  记录事件属性数据-替换为$ {event-properties}
    • $ {event-properties} - 记录事件属性数据-重命名$ {event-context}
    • $ {gdc} - 全局诊断上下文项。包含每个应用程序实例值的字典结构。
    • $ {install-context} - 安装参数(传递给InstallNLogConfig)。
    • $ {mdc} - 映射诊断上下文-线程局部结构。
    • $ {mdlc} - 异步映射诊断上下文-线程局部结构。MDC的异步版本
    • $ {ndc} - 嵌套诊断上下文-线程局部结构。
    • $ {ndlc} - 异步嵌套诊断上下文-线程本地结构。

    专柜

    • $ {counter} - 一个计数器值(在每个布局渲染中增加)
    • $ {guid} - 全局唯一标识符(GUID)。
    • $ {sequenceid} - 日志序列号

    日期和时间

    • $ {date} - 当前日期和时间。
    • $ {longdate} - 日期和时间,采用可排序的长格式`yyyy-MM-dd HH:mm:ss.ffff`。
    • $ {qpc} - 高精度计时器,基于QueryPerformanceCounter返回的值。
    • $ {shortdate} - 短日期,格式为yyyy-MM-dd。
    • $ {ticks} - 当前日期和时间的“ Ticks”值。
    • $ {时间} - 在24小时,可排序的格式HH的时间:MM:ss.mmm。

    编码和字符串转换

    • $ {json-encode} -  使用JSON规则转义另一个布局的输出。
    • $ {left} -  文字的左半部分
    • $ {小写} -  将另一个布局输出的结果转换为小写。
    • $ {norawvalue} -  防止将另一个布局渲染器的输出视为原始值
    • $ {pad} -  将填充应用于另一个布局输出。
    • $ {replace} -  将另一个布局的输出中的字符串替换为另一个字符串。正则表达式可选
    • $ {replace-newlines} -  用另一个字符串替换换行符。
    • $ {right} -  文字的右侧
    • $ {rot13} -  使用ROT-13解码“加密”的文本。
    • $ {substring} -  文本的子字符串
    • $ {trim-whitespace} -  从另一个布局渲染器的结果修剪空白。
    • $ {uppercase} -  将另一个布局输出的结果转换为大写。
    • $ {url-encode} -  编码另一个布局输出的结果,以供URL使用。
    • $ {wrapline} -  以指定的行长包装另一个布局输出的结果。
    • $ {xml-encode} -  将另一个布局输出的结果转换为XML兼容的。

    环境和配置文件

    • $ {appsetting} -. config文件 NLog.Extended中的应用程序配置设置
    • $ {configsetting} - 来自appsettings.json或ASP.NET Core和.NET Core中其他配置的值 NLog.Extensions.Logging NLog.Extensions.Hosting NLog.Web.AspNetCore
    • $ {environment} - 环境变量。(例如PATH,OSVersion)
    • $ {environment-user} - 用户身份信息(用户名)。
    • $ {}注册表 - 从Windows注册表中的值。

    文件和目录

    • $ {basedir} - 当前应用程序域的基本目录。
    • $ {currentdir} - 应用程序的当前工作目录。
    • $ {file-contents} - 呈现指定文件的内容。
    • $ {filesystem-normalize} -  通过将文件名替换为安全字符来过滤文件名中不允许的字符。
    • $ {} nlogdir - 其中NLog.dll所在的目录。
    • $ {specialfolder} - 系统专用文件夹路径(包括“我的文档”,“我的音乐”,“程序文件”,“桌面”等)。
    • $ {tempdir} - 临时目录。

    身分识别

    • $ {identity} - 线程身份信息(名称和身份验证信息)。
    • $ {windows-identity} - 线程Windows身份信息(用户名)
    • $ {windows-identity} - 线程Windows身份信息(用户名) Nlog.WindowsIdentity

    整合方式

    • $ {gelf} - 将日志转换为GELF格式 NLog.GelfLayout 外部
    • $ {log4jxmlevent} - 与log4j,Chainsaw和NLogViewer兼容的XML事件描述。

    进程,线程和程序集

    • $ {appdomain} - 当前的应用程序域。
    • $ {assembly-version} - 默认应用程序域中可执行文件的版本。
    • $ {gc} - 有关垃圾收集器的信息。
    • $ {hostname} - 运行该进程的计算机的主机名。
    • $ {local-ip} - 来自网络接口的本地IP地址。
    • $ {machinename} - 运行进程的计算机名。
    • $ {performancecounter} - 性能计数器。
    • $ {processid} - 当前进程的标识符。
    • $ {processinfo} - 有关正在运行的进程的信息。例如StartTime,PagedMemorySize
    • $ {processname} - 当前进程的名称。
    • $ {processtime} - 格式为HH:mm:ss.mmm的处理时间。
    • $ {threadid} - 当前线程的标识符。
    • $ {threadname} - 当前线程的名称。

    Silverlight

    • $ {document-uri} - 承载当前Silverlight应用程序的HTML页面的URI。
    • $ {sl-appinfo} - 有关Silverlight应用程序的信息。

    Web,ASP.NET和ASP.NET Core

    • $ {ASPNET-appbasepath} - ASP.NET应用程序的基本路径(内容根) NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET应用} - ASP.NET应用程序变量。 网络日志
    • $ {ASPNET环境} - ASP.NET环境名称 NLog.Web.AspNetCore
    • $ {ASPNET项} - ASP.NET`HttpContext`项变量。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-MVC-行动} - ASP.NET MVC动作名称 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-MVC控制器} - ASP.NET MVC控制器名称 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求} - ASP.NET请求变量。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-请求的contentType} - ASP.NET Content-Type头(实施例应用/ JSON) NLog.Web.AspNetCore
    • $ {ASPNET请求,饼干} - ASP.NET请求的cookie的内容。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求形式} - ASP.NET请求表的内容。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求报头} - ASP.NET部首键/值对。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求主机} - ASP.NET请求主机。 NLog.Web NLog.Web.AspNetCore
    • $ {aspnet-request-ip} - 客户端IP。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求-方法} - ASP.NET请求方法(GET,POST等)。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求,贴体} - ASP.NET贴体/净荷 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-请求的查询字符串} - ASP.NET请求的查询字符串。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET,请求引荐} - ASP.NET请求引用。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求的URL} - ASP.NET请求URL。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET请求,用户代理} - ASP.NET请求用户代理。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-响应的StatusCode} - ASP.NET响应状态代码的内容。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET会话} - ASP.NET Session变量。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-的SessionID} - ASP.NET会话ID的变量。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-traceidentifier} - ASP.NET跟踪标识 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET用户-的authType} - ASP.NET用户验证。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET用户身份} - ASP.NET用户变量。 NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET用户-isauthenticated} - ASP.NET用户身份验证? NLog.Web NLog.Web.AspNetCore
    • $ {ASPNET-webrootpath} - ASP.NET Web根目录路径(wwwroot文件) NLog.Web NLog.Web.AspNetCore
    • $ {iis-site-name} - IIS网站的名称。 NLog.Web NLog.Web.AspNetCore

    3.2.2 rules

    规则部分控制如何将Logger对象中的LogEvents重定向到输出目标。其中记录器名称和日志级别可用于筛选。

    当创建一个NLogLogger对象时,必须提供一个类似NLog.LogManager.GetLogger的记录器名称(“我的记录器名称”)。也可以使用NLog.LogManager.GetCurrentClassLogger()从类上下文中提取记录器名称,其中记录器名称变为“NameSpace.ClassName”。

    1. <rules>
    2. <logger name="*" minlevel="Trace" writeTo="allfile" />
    3. <logger name="*" minLevel="Debug" writeTo="console"/>
    4. <logger name="Microsoft.*" writeTo="blackhole" final="true" />
    5. rules>

     参数配置说明

    参数名说明备注
    name匹配logger对象的记录器名称-可能包括通配符(* and ?)
    minlevel要记录的最低级别(与指定级别和以上级别相匹配)
    maxlevel要记录的最大级别(与指定级别和以下级别匹配)
    level要记录的单个级别
    levels要记录的级别的逗号分隔列表
    writeTo要写入的目标的逗号分隔列表
    final最终规则匹配后不处理任何规则
    enabled设置为false可禁用规则而不删除它
    ruleName允许使用配置进行规则查找的规则标识符
    finalMinLevel记录器匹配将被限制为以下规则的指定最低级别

    官方文档参见:https://github.com/NLog/NLog/wiki/Configuration-file#rules

    3.2.3 extensions

    可以将扩展配置为包括其他NLog包或自定义包:

    只需在<extensions/>中的配置中引用DLL

    1. <extensions>
    2. <add assembly="NLog.Web.AspNetCore" />
    3. extensions>

    3.2.4 include

    NLog提供了包含文件功能,因此配置可以存储在多个文件中

    <include file="nlog-common.config" />

    与NLog-config中的大多数属性一样,file属性可能引用变量。下面的示例包括一个与nlog运行的计算机名称相同的文件。

    <include file="${machinename}.config"/>

    3.2.5 variable

    NLog配置变量允许您通过减少重复文本来简化配置。变量可用于为常用的(或长而复杂的)NLog布局指定人名。这样可以更容易地组织和构造NLog配置。

    1. <variable name="logDir" value="${basedir}/nlogs/${date:format=yyyyMMdd}/${level}.log"/>

    4.附录

    输出日志到数据库参见:Database target · NLog/NLog Wiki · GitHub

    输出日志到控制台参见:ColoredConsole target · NLog/NLog Wiki · GitHub

  • 相关阅读:
    2022年全球市场刷脸支付系统总体规模、主要企业、主要地区、产品和应用细分研究报告
    单接口的批量测试如何实现
    HCIP实验2-1:IS-IS 配置实验
    mindspore-【NLLLoss】检查type时测试报错
    flutter 使用texture实现Android渲染视频
    修改YOLOv5的模型结构第二弹
    Django admin 站点管理
    GIT 首次提交
    认识String
    MySQL远程登录提示Access denied的场景
  • 原文地址:https://blog.csdn.net/liwan09/article/details/134069932