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

.NET Core 3.1升级.NET 6后Serilog SpanId丢失原因咨询

.NET 6升级后Serilog中SpanId丢失的原因及解决方法

原因分析

1. .NET 6分布式追踪体系的重构

.NET 6对分布式追踪机制做了统一重构,全面采用System.Diagnostics.Activity作为追踪上下文的核心载体,替代了.NET Core 3.1中相对零散的追踪实现。Serilog.AspNetCore 3.x(适配.NET Core 3.1)版本中,SpanId的采集依赖旧版追踪API的隐式支持,升级到.NET 6后这套旧机制被废弃。

2. Serilog.AspNetCore版本升级后的默认行为调整

Serilog.AspNetCore 6.x(适配.NET 6)为贴合.NET官方新追踪标准,不再默认集成SpanId的自动采集逻辑。而RequestId来自ASP.NET Core原生的HttpContext.TraceIdentifier,Serilog.AspNetCore各版本均默认捕获该属性,因此不会丢失。

3. 缺少显式的SpanId Enricher

.NET Core 3.1环境中,Serilog.AspNetCore可能通过内部逻辑隐式添加了SpanId的enricher,但升级到6.x版本后该逻辑被移除,需要手动引入专门的enricher组件来采集SpanId。

解决步骤

  1. 添加Serilog.Enrichers.Span包引用
    在项目的.csproj文件中新增以下包引用:

    <PackageReference Include="Serilog.Enrichers.Span" Version="3.1.0" />
    
  2. 配置Serilog启用SpanId采集
    在Serilog的配置代码中,添加SpanId enricher:

    Log.Logger = new LoggerConfiguration()
        .Enrich.WithSpanId() // 启用SpanId采集
        .Enrich.WithTraceId() // 可选:同时采集TraceId
        // 其他配置(如写入器、其他enricher)
        .CreateLogger();
    
  3. 确保分布式追踪在应用中启用
    .NET 6 Web应用默认已启用Activity支持,若有特殊配置,需确认Program.cs中相关服务已注册:

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddControllersWithViews();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:54:53