我已在当前正在生产的 .NET 6 项目上配置了 App Insights,代码如下所述。但是,在应用服务托管的开发环境中,我可以看到队列工作线程(服务)的跟踪日志的完整列表,并且对于生产中的相同服务,仅出现错误(严重性 3)跟踪。
什么可能导致这种症状?是否有一些隐式环境处理代码来防止在非开发环境中出现痕迹?
如下所示,我确实有一个 QueueTelemetryFilter 类,用于过滤特定时间段内不成功的遥测数据,但这 a) 会影响遥测数据,并且 b) 如果是原因,则在所有环境中都将保持一致。
配置:
程序.cs
// Add services to the container.
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<QueueTelemetryFilter>();
appsettings.Development.json / appsettings.Production.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ApplicationInsights": {
"ConnectionString": "[REDACTED]"
}
}
用途:
public class SomeQueueProcessor: ISomeQueueProcessor
{
private readonly ILogger<SomeQueueProcessor> logger;
public SomeQueueProcessor(
ILogger<SomeQueueProcessor> logger)
{
this.logger = logger;
}
public async Task HandleQueue(SomeMessage message, CancellationToken cancellationToken)
{
logger.LogInformation("Begin SomeTask", message.Metadata);
// some code
try {
// some more code
catch(SomeException se){
logger.LogError("SomeTask Failed", se.ExceptionMetadata);
}
logger.LogInformation("End SomeTask", message.Metadata);
}
}
事实证明 - 我们的环境配置不正确,它在 Serilog 中注册了重复的 App Insights 记录器。
此后,我们删除了 Serilog 中 App Insights 的任何日志记录,并直接与 App Insights 集成。
感谢大家对我的指导!