You need to enable JavaScript to run this app. Serilog为何仅在Debug以上日志级别输出中出现额外加粗文本?
优惠活动
大模型
产品
解决方案
定价
更多

Serilog为何仅在Debug以上日志级别输出中出现额外加粗文本?

现象本质说明

你观察到的、仅在Information/Warn/Error级别出现的带info: /warn: /fail: 前缀的额外文本,和你配置的Serilog逻辑没有任何关系,也不是Serilog内置格式的特殊加粗效果。

产生逻辑拆解

  1. 这类基于.NET通用主机构建的程序,默认会集成微软官方的Microsoft.Extensions.Logging(MEL)日志框架,默认挂载内置的控制台日志提供程序,这个内置提供程序的原生输出格式就是<小写日志级别>: <日志来源的命名空间/类名>[<事件ID>],紧跟换行后的日志消息内容,和你示例里的额外输出格式完全一致。
  2. 内置MEL控制台提供程序默认会对级别前缀应用终端颜色高亮,视觉上接近加粗效果;同时它的默认输出阈值为Information级别,即只有日志级别>=Information时才会触发输出,Debug级别的日志会被内置提供程序直接过滤,这就完美匹配你观察到的“只有Debug以上级别才会出现加粗感的额外文本”的现象。
  3. 你当前的接入方式没有清理MEL默认挂载的内置日志提供程序,导致两套日志输出逻辑同时工作:
    • Debug级别:仅Serilog的Console Sink按照你自定义的[{Timestamp:g} {Level:u3}] {Message:lj}{NewLine}格式输出日志,无额外内容
    • Info/Warn/Error级别:先由MEL内置控制台提供程序输出自带格式的日志,再由Serilog的Console Sink输出你自定义格式的日志,最终形成你看到的重复三行输出效果。

修复方案

  • 代码层面修复:在主机初始化链路中清空所有MEL内置日志提供程序,再接入Serilog作为唯一日志实现,示例代码:
Host.CreateDefaultBuilder(args)
    // 清除MEL默认挂载的所有日志提供程序
    .ClearLoggingProviders()
    .UseSerilog((hostContext, loggerConfig) =>
    {
        // 从配置文件读取Serilog配置,和你现有的JSON配置完全兼容
        loggerConfig.ReadFrom.Configuration(hostContext.Configuration);
    })
  • 配置层面修复:如果不想改动代码,直接在配置文件中关闭MEL内置Console提供程序的输出即可,在现有Serilog配置同级的Logging配置节下补充:
{
  "Logging": {
    "Console": {
      "LogLevel": {
        "Default": "None"
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 22:15:05