如何丰富Serilog的自定义维度以获取应用洞察

问题描述 投票:0回答:1

我尝试了几种不同的方法来使用 Serilog 将一些自定义属性记录到应用程序洞察中,但它们都没有显示在日志中。首先我尝试使用

Enrich.FromLogContext()
方法:

程序.cs:

public static IHostBuilder CreateHostBuilder() =>

            new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .ConfigureAppConfiguration((_, _) =>
                {
                })
                .UseSerilog((context, _, configuration) =>
                {
                    configuration.MinimumLevel.Override("System", LogEventLevel.Information);
                    configuration.MinimumLevel.Override("Microsoft", LogEventLevel.Information);
                    configuration.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning); // Suppressing AspNetCore framework log noise
                    configuration.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning); // Suppressing EntityFrameworkCore framework log noise
                    configuration.ReadFrom.Configuration(context.Configuration);
                    configuration.WriteTo.Console();
                    configuration.Enrich.FromLogContext();
                })
                .ConfigureServices((context, services) =>
                {
                    var configuration = context.Configuration;
                    services.AddApplicationInsightsTelemetry(configuration);
                    services.AddLogging(logBuilder => logBuilder.AddSerilog(dispose: true));
                 }

然后将自定义属性添加到我的类中的日志上下文中:

MyClass.cs:

private ILogger Log => Serilog.Log.ForContext(GetType());

    public async Task Run()
    {
        using (LogContext.PushProperty("FunctionName", "MyClass.Run"))
        {
            Log.Here().Information("Logging from MyClass.Run()");
        }
     }

属性“FunctionName”未与应用程序见解中的日志消息一起显示。

接下来我尝试显式地将属性添加到单个日志消息中:

//logic here
Log.Here().Information("Logging from function {FunctionName}, "Run");
//logic here

但这也没有出现。只是为了澄清:正在记录消息,但自定义属性不包含在应用程序见解的 customDimensions 字段中。是不是我配置有问题?

编辑:我找到了一个解决方案,但不太确定它为什么有效。如果我将以下内容添加到我的 Serilog 配置中:

configuration.WriteTo.ApplicationInsights(context.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"], TelemetryConverter.Traces);

自定义维度将添加到日志中。但是,每行也会记录两次,大概是因为它使用

WriteTo
方法记录一次,并使用
services.AddApplicationInsightsTelemetry(configuration);
的内置日志记录一次。我不明白的是为什么来自
AddApplicationInsightsTelemetry
的日志不包含自定义维度。

azure-application-insights serilog
1个回答
0
投票

我不明白为什么来自

AddApplicationInsightsTelemetry
的日志不包含自定义尺寸。

要使用默认的 ApplicationInsightsSDK 记录自定义维度,您需要使用遥测客户端。

  • 默认情况下,它提供了基本的自定义属性。

enter image description here

  • 要记录任何其他维度,您需要使用遥测客户端(稍后已完成)。

您还可以参考我的SOThread来记录其他自定义尺寸。

这个MSDoc也解释了同样的事情

当您使用独立包时,

TelemetryClient
不会被注入到依赖注入中。您需要创建
TelemetryClient
的新实例并使用记录器提供程序使用的相同配置。

根据此 GitHub,您可以使用

TelemetryClient
或创建您自己的
ITelemetryConverter
来记录其他自定义属性。

使用

TelemetryClient
自定义尺寸
AddApplicationInsightsTelemetry

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.