You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6中NLog日志问题:logger属性解析与日志不写入排查

NLog配置疑问与日志写入故障解决

一、rules段"logger"属性的作用

  • 该属性用于指定哪些日志记录器会匹配当前规则,支持通配符匹配:
    • *:匹配所有日志记录器
    • YourNamespace.*:匹配指定命名空间下的所有记录器
    • YourNamespace.YourClass:匹配特定类对应的记录器
  • 你当前设置的"controllers and repositories"是无效值,NLog无法识别这个规则,导致业务日志无法匹配到输出目标。

二、日志无法写入文件的问题修复

核心问题

  1. 规则匹配无效:错误的logger值导致业务日志(控制器类的记录器)无法匹配到输出规则。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:05:21