首页 > 解决方案 > 使用 serilog 浓缩器 nuget 包时,CorrelationId 为 Null

问题描述

我想将 correlationId 的值填充到我的 applicationInsights 中。现在该值为空。我已经安装了 serilog.enrichers.correlationId nuget 包,并且在我的 startup.cs 文件中有 services.AddHTTPContextAccessor,但相关性 ID 的值仍然为空。我错过了什么吗?有什么建议吗?我的来源是:- https://github.com/ekmsystems/serilog-enrichers-correlation-id

        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(Configuration)
            .CreateLogger();

以上是我在startup.cs 中的记录器配置。我在 appsettings.json 的丰富标签中定义的所有其他丰富器都被填充,但相关 ID 为空。

标签: c#azure-application-insightsserilog

解决方案


这是我的测试结果:

在此处输入图像描述

我在下面做了什么:

在我的asp.net核心应用中,先安装相关包,然后编辑Program.cs-> CreateHostBuilder:</p>

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration).Enrich.WithCorrelationId()
                    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}")
                    .WriteTo.ApplicationInsights(new TelemetryConfiguration { InstrumentationKey = "your_instrumentation_key" }, TelemetryConverter.Traces)
             );

我的包裹:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
    <PackageReference Include="Serilog.Enrichers.CorrelationId" Version="3.0.1" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
  </ItemGroup>

</Project>

推荐阅读