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

NLog v5未遵循Microsoft.*日志记录器的finalMinLevel规则

.NET 7 Worker Service中NLog无法限制Microsoft日志级别的问题

问题现象

已在appsettings.json的NLog配置中设置日志记录器Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler的finalMinLevel为Warn,但该日志器的所有Trace日志仍会写入文件和控制台目标。

已尝试的无效操作

  • 调整NLog规则列表的顺序
  • 将日志记录器名称简化为Microsoft.*
  • 提升finalMinLevel至Error以避免命名冲突

临时方案的局限性

仅有的部分有效方案是使用NLogProviderOptions,但存在明显问题:

builder.AddNLog(new NLogProviderOptions()
{
    RemoveLoggerFactoryFilter = false
});
  • 丢失其他日志记录器的部分Debug/Trace日志
  • 无法将最低级别设为Warn,仅能移除Trace/Debug条目,仍会收到不必要的Info级消息

原NLog配置(appsettings.json)

"NLog": {
    "internalLogLevel": "Info",
    "internalLogFile": "internal-nlog.txt",
    "extensions": [
      { "assembly": "NLog.Extensions.Logging" }
    ],
    "variables": {
      "var_logdir": "C:\\test\\test1\\__Logs"
    },
    "targets": {
      "async": true,
      "logfile": {
        "type": "File",
        "fileName": "${var:var_logdir}/Dispatcher-${shortdate}.log",
        "layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${callsite}|${message:exceptionSeparator=|:withException=true}"
      },
      "applogfile": {
        "type": "File",
        "fileName": "${var:var_logdir}/Dispatcher-xx-${shortdate}.log",
        "layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${callsite}|${message:exceptionSeparator=|:withException=true}"
      },
      "logconsole": {
        "type": "ColoredConsole",
        "useDefaultRowHighlightingRules": true,
        "detectConsoleAvailable": true,
        "DetectOutputRedirected": true,
        "layout": "${longdate}|${level}|${callsite}|${message:exceptionSeparator=|:withException=true}"
      }
    },
    "rules": [
      {
        "logger": "Microsoft.*",
        "finalMinLevel": "Warn"
      },
      {
        "logger": "Microsoft.EntityFrameworkCore*",
        "finalMinLevel": "Info"
      },
      {
        "logger": "*",
        "minLevel": "Trace",
        "writeTo": "logconsole"
      },
      {
        "logger": "*",
        "minLevel": "Trace",
        "writeTo": "logfile"
      },
      {
        "logger": "CFX*",
        "minLevel": "Trace",
        "writeTo": "applogfile"
      },
      {
        "logger": "Order*",
        "minLevel": "Trace",
        "writeTo": "applogfile"
      },
      {
        "logger": "Trading*",
        "minLevel": "Trace",
        "writeTo": "applogfile"
      }
    ]
  },

项目环境:使用最新包的.NET 7 Worker Service

解决方案

经测试,修改NLog目标的布局,将${callsite}替换为${logger}即可彻底解决问题,修改后的布局示例:

"layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${logger}|${message:exceptionSeparator=|:withException=true}"

调整后测试多种规则组合均能正常生效。

内容的提问来源于stack exchange,提问作者Alberto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:17