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

如何将Serilog接入.NET Aspire并在仪表盘显示结构化日志?

.NET Aspire仪表盘无法显示Serilog结构化日志求助

我一直尝试让Serilog将遥测数据发送至.NET Aspire仪表盘,但打开仪表盘后「Structured logs」标签始终为空。注释掉Program.cs中的Serilog配置改用默认ILogger后,仪表盘就能正常显示结构化日志。

我查看过Aspire仓库中的两个相关Issue,但未能解决问题:

  • Serilog for .NET Aspire
  • Duplicate service name when using OTLP logging

当前Serilog配置

// This extension is auto generated when adding Aspire. More on that below..
builder.AddServiceDefaults();

builder.Host.UseSerilog((hostContext, services, loggerConfiguration) => loggerConfiguration
    .ReadFrom.Configuration(builder.Configuration)
    .Enrich.FromLogContext()
    .Enrich.WithPropertiesMasking(builder.Configuration)
    .Enrich.WithProperty("ServiceName", DaprConstants.API_SERVICE_NAME)
    .Enrich.WithThreadId()
    .Enrich.WithCorrelationIdHeader("X-Correlation-ID")
    .WriteTo.ApplicationInsights
    (        
        new TelemetryConfiguration() { ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"] },
        TelemetryConverter.Traces
    )
    .WriteTo.OpenTelemetry(opts =>
    {
        opts.Endpoint = builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]!;
        opts.ResourceAttributes.Add("service.name", builder.Configuration["OTEL_SERVICE_NAME"] ?? "Unknown");
    })
);

若对部分环境变量不熟悉,可参考.NET Aspire官方文档中的遥测部分内容。

修改后的ServiceDefaults扩展类(也试过保持原配置不变)

public static class Extension
{
    public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder)
    {
        builder.ConfigureOpenTelemetry();

        /* Other configuration... */

        return builder;
    }

    public static IHostApplicationBuilder ConfigureOpenTelemetry(this IHostApplicationBuilder builder)
    {
        // Tried commenting this out.
        /*builder.Logging.AddOpenTelemetry(logging =>
        {
            logging.IncludeFormattedMessage = true;
            logging.IncludeScopes = true;
        });*/

        builder.Services.AddOpenTelemetry()
            .WithMetrics(metrics =>
            {
                metrics.AddAspNetCoreInstrumentation()
                    .AddHttpClientInstrumentation()
                    .AddRuntimeInstrumentation();
            })
            .WithTracing(tracing =>
            {
                if (builder.Environment.IsDevelopment())
                {
                    // We want to view all traces in development
                    tracing.SetSampler(new AlwaysOnSampler());
                }

                tracing.AddAspNetCoreInstrumentation()
                    .AddHttpClientInstrumentation();
            });

        builder.AddOpenTelemetryExporters();

        return builder;
    }

    private static IHostApplicationBuilder AddOpenTelemetryExporters(this IHostApplicationBuilder builder)
    {
        var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);

        if (useOtlpExporter)
        {
            // In one of the GitHub issues David Fowler suggested commenting this line out.
            //builder.Services.Configure<OpenTelemetryLoggerOptions>(logging => logging.AddOtlpExporter());
            builder.Services.ConfigureOpenTelemetryMeterProvider(metrics => metrics.AddOtlpExporter());
            builder.Services.ConfigureOpenTelemetryTracerProvider(tracing => tracing.AddOtlpExporter());
        }

        if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
        {
            builder.Services.AddOpenTelemetry()
               .UseAzureMonitor();
        }

        return builder;
    }
}

我认为AppHost配置与当前问题无关,故未展示。

请问有没有成功将Aspire与Serilog结合使用的开发者?能否提供相关解决指导?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:52:52