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

如何在使用NLog的ASP.NET Core 3.1项目中禁用Hangfire日志?

问题原因

你原先的配置未生效的核心原因如下:

  • appsettings.json中Logging:LogLevel下的配置属于Microsoft.Extensions.Logging(MEL)层的过滤规则,仅作用于MEL默认的日志管道
  • 你代码中硬编码的LoggingRule("*", LogLevel.Trace, LogLevel.Fatal, myCustomTarget)是NLog层的全局规则,优先级高于MEL的过滤配置,会直接采集所有来源的日志,包括Hangfire输出的内容,因此MEL层的Hangfire禁用配置不会生效。
解决方案

可以仅通过appsettings.json实现禁用需求,无需编写NLog规则、过滤器代码,也无需自定义Hangfire的NoOpLogger,操作步骤如下:

  1. 移除代码中硬编码的NLog规则:删除你现有代码中定义的那条LoggingRule,改为让NLog从appsettings.json加载所有规则配置
  2. 在appsettings.json中新增NLog配置段:在原有配置基础上添加NLog的目标和规则配置,优先配置Hangfire的拦截规则:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Hangfire": "None"
    }
  },
  "NLog": {
    "targets": {
      "myCustomTarget": {
        // 此处填写你之前自定义Target的配置参数,和代码中原myCustomTarget的配置保持一致
        "type": "你的自定义Target注册名称"
      }
    },
    "rules": [
      // 第一条规则拦截所有Hangfire相关日志,不输出,并且标记为final终止后续规则匹配
      {
        "logger": "Hangfire*",
        "minLevel": "Trace",
        "maxLevel": "Fatal",
        "final": true,
        "writeTo": ""
      },
      // 第二条规则匹配所有其他日志,输出到自定义Target
      {
        "logger": "*",
        "minLevel": "Trace",
        "maxLevel": "Fatal",
        "writeTo": "myCustomTarget"
      }
    ]
  }
}
  1. 调整NLog初始化逻辑:在Program.cs的NLog初始化部分,改为从appsettings加载NLog配置:
var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json")
    .Build();

LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));

注意事项

如果你坚持保留代码中硬编码的全局NLog规则,则无法仅通过appsettings.json的原生配置实现Hangfire日志禁用,必须修改硬编码规则添加过滤逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:02