.NET Core 6中NLog日志问题:logger属性解析与日志不写入排查
NLog配置疑问与日志写入故障解决
一、rules段"logger"属性的作用
- 该属性用于指定哪些日志记录器会匹配当前规则,支持通配符匹配:
*:匹配所有日志记录器YourNamespace.*:匹配指定命名空间下的所有记录器YourNamespace.YourClass:匹配特定类对应的记录器
- 你当前设置的"controllers and repositories"是无效值,NLog无法识别这个规则,导致业务日志无法匹配到输出目标。
二、日志无法写入文件的问题修复
核心问题
- 规则匹配无效:错误的logger值导致业务日志(控制器类的记录器)无法匹配到输出规则。
- NLog加载顺序错误:先设置
LogManager.Configuration再调用AddNLog(),会导致配置被覆盖,无法生效。
修复步骤
1. 修正NLog配置的rules段
将logger属性改为合法的匹配规则,示例:
<rules> <!-- 匹配所有记录器,级别≥Info时输出到文件(需确保target名称为file) --> <logger name="*" minlevel="Info" writeTo="file" /> <!-- 仅匹配Controllers命名空间下的记录器,输出Debug及以上级别 --> <logger name="YourApp.Controllers.*" minlevel="Debug" writeTo="file" /> </rules>
2. 调整Program.cs中的NLog加载逻辑
替换原有代码为:
builder.Logging.ClearProviders(); builder.Logging.AddConsole(); // 直接传入配置段,让AddNLog正确加载配置 builder.Logging.AddNLog(configuration.GetSection("NLog"));
或者调整顺序:
builder.Logging.ClearProviders(); builder.Logging.AddConsole(); builder.Logging.AddNLog(); // 先添加NLog再设置配置,避免被覆盖 LogManager.Configuration = new NLogLoggingConfiguration(configuration.GetSection("NLog"));
3. 验证日志级别配置
- 确保NLog规则的
minlevel不高于你调用的日志级别(比如调用LogDebug,minlevel需设为Debug)。 - 检查
appsettings.json中的Logging配置,允许对应日志级别:
"Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }
若需输出Debug日志,需将Default改为Debug。
额外排查点
- 确认日志文件路径有写入权限,NLog能生成初始化日志说明路径基本可用,但仍需验证运行用户权限。
- 开启NLog内部日志排查错误:在配置中添加
internalLogFile和internalLogLevel,查看是否有报错:
<nlog internalLogFile="nlog-internal.log" internalLogLevel="Warn"> <!-- 其他配置内容 --> </nlog>
内容的提问来源于stack exchange,提问作者Alonso Contreras
相关产品推荐
相关产品推荐

