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

.NET 8中Serilog重复日志问题:如何关闭非JSON格式日志?

重复日志问题原因及解决方法

问题原因

你的Serilog配置同时通过代码和JSON配置文件添加了两次控制台输出:

  • 代码中通过.WriteTo.Console(new CompactJsonFormatter())指定了JSON格式的控制台输出
  • JSON配置里的Serilog.WriteTo数组又添加了一个默认使用非JSON格式的控制台输出
    两者叠加导致每条日志被输出两次,一次是非JSON格式,一次是JSON格式。

解决方法

任选以下一种方式即可:

方式1:移除代码中的控制台输出配置,完全依赖JSON配置

修改C#代码,移除硬编码的控制台输出配置,让Serilog仅从配置文件读取设置。如果需要JSON格式,在配置文件中指定格式化器:

修改后的C#代码:

builder.Logging.ClearProviders();
builder.Host.UseSerilog((context, provider, configuration) => configuration
  .ReadFrom.Configuration(context.Configuration)
  .ReadFrom.Services(provider)
  .Enrich.FromLogContext()
  .Enrich.WithThreadId()
  .Enrich.WithThreadName());

app.UseSerilogRequestLogging();

修改JSON配置,为Console写入器添加CompactJsonFormatter:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
        }
      }
    ]
  },
  "Logging": {
    "LogLevel": {
      "Default": "None"
    }
  }
}

方式2:移除JSON配置中的控制台输出,完全依赖代码配置

修改JSON配置,删除Serilog.WriteTo数组里的Console项:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "None"
    }
  }
}

C#代码保持不变即可,此时仅代码中配置的JSON格式控制台输出生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:35:56