环境
.net 6.0 控制台程序
第三方库
NLog.Extensions.Logging
Microsoft.Extensions.DependencyInjection
创建 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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="NLog\all_log.log">
<targets>
<!--文件日志,archive相关参数:文件拆分,每100M拆分一个新文件-->
<target xsi:type="File"
name="all_log"
fileName="NLog\${shortdate}\${uppercase:${level}}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
archiveFileName="NLog\${shortdate}\${uppercase:${level}}${shortdate}.{####}.log"
archiveNumbering="Rolling"
archiveAboveSize="10485760"
concurrentwrites="true"
maxArchiveFiles="100"
/>
</targets>
<rules>
<!-- add your logging rules here -->
<!--路由顺序会对日志打印产生影响。路由匹配逻辑为顺序匹配。-->
<logger name="Program" minlevel="Info" writeTo="all_log" final="true" />
<logger name="Fenglix.*" minlevel="Info" writeTo="all_log" final="true" />
<logger name="*" minlevel="Warn" writeTo="all_log" />
</rules>
</nlog>
<rules> 是日志筛选规则 类似 c# 的 switch 语法,其中 final="true" 类似 break 匹配了才不往下走。
name="Fenglix.*" 日志源/记录者的名字,理解为执行日志代码的那个命名空间或者类 (允许使用通配符*)
日志等级说明
- NLog支持如下几种记录等级(优先级:Trace→Debug→Info→Warn→Error→Fatal):
- Trace最常见的记录信息,一般用于普通输出
- Debug同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info信息类型的消息
- Warn警告信息,一般用于比较重要的场合
- Error错误信息
- Fatal致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
使用方式
直接创建实例使用
依赖注入容器使用
直接使用 NLog.LogManager 创建
微软自带的日志
参考 .NET Core 和 ASP.NET Core 中的日志记录 | Microsoft Learn