如何将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
相关产品推荐
相关产品推荐

