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

如何消除Application Insights默认记录的空SQL事件?

解决方案

方法1:通过Application Insights遥听器过滤特定EF Core事件

可以通过自定义遥听器处理器,精准过滤掉EF Core生成的空连接事件。修改你的Application Insights配置代码,并添加处理器类:

services.AddApplicationInsightsTelemetry(opt =>
{
    opt.EnableAdaptiveSampling = false;
    // 注册自定义遥听器处理器
    opt.TelemetryProcessors.Add<FilterEmptyEfConnectionEventsProcessor>();
});

// 自定义遥听器处理器,用于过滤空EF连接事件
public class FilterEmptyEfConnectionEventsProcessor : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _nextProcessor;

    public FilterEmptyEfConnectionEventsProcessor(ITelemetryProcessor next)
    {
        _nextProcessor = next;
    }

    public void Process(ITelemetry telemetryItem)
    {
        if (telemetryItem is EventTelemetry eventTelemetry)
        {
            // 匹配EF Core的数据库连接事件,且仅包含数据库名、主机名两个属性的空事件
            if (eventTelemetry.Name == "Microsoft.EntityFrameworkCore.Database.Connection" && 
                eventTelemetry.Properties.Count == 2 && 
                string.IsNullOrEmpty(eventTelemetry.Summary))
            {
                // 跳过该事件,不发送至Application Insights
                return;
            }
        }
        // 处理其他正常遥测事件
        _nextProcessor.Process(telemetryItem);
    }
}

方法2:禁用EF Core的特定日志类别(谨慎使用)

如果不需要EF Core的数据库连接相关日志,可以直接在EF Core配置中禁用对应日志类别,从源头阻止事件生成:

services.AddDbContext<MyDbContext>((serviceProvider, options) =>
{
    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
    options.UseSqlServer(connectionString);
    // 禁用数据库连接类别的日志输出
    options.LogTo(_ => {}, LogLevel.None, new[] { DbLoggerCategory.Database.Connection.Name });
});

注意:此方法会完全关闭EF Core的数据库连接日志,若需要保留部分有用的连接日志,优先选择方法1进行精准过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:18:15