我尝试了几种不同的方法来使用 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
的日志不包含自定义维度。
我不明白为什么来自
的日志不包含自定义尺寸。AddApplicationInsightsTelemetry
要使用默认的 ApplicationInsightsSDK 记录自定义维度,您需要使用遥测客户端。
您还可以参考我的SOThread来记录其他自定义尺寸。
这个MSDoc也解释了同样的事情
当您使用独立包时,
不会被注入到依赖注入中。您需要创建TelemetryClient
的新实例并使用记录器提供程序使用的相同配置。TelemetryClient
根据此 GitHub,您可以使用
TelemetryClient
或创建您自己的 ITelemetryConverter
来记录其他自定义属性。
使用
TelemetryClient
自定义尺寸 AddApplicationInsightsTelemetry