azure 应用洞察中间件-跟踪SQL参数

ipakzgxi  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(155)
    • 小背景**:我有. Net Core 2应用程序与应用洞察力。我正在读取请求正文,并将其保存为自定义属性与TelemetryInitializer。我迁移到. Net Core 3,在那里我不能使用TelemetryInitializer了,因为. Net Core 3禁用同步IO。类似的问题描述了here。所以我已经实现了应用洞察力中间件按照这个例子。我使用EF Core进行所有数据库访问。
    • 问题**:我发现了这个issue,它说可以"在TelemetryInitializer中访问SqlCommand操作细节"。但是我如何使用应用洞察中间件来实现这一点呢?
hi3rlvi2

hi3rlvi21#

您不必为此编写www.example.com核心中间件。相反,您应该使用TelemetryInitializer。给定如下的初始化程序:asp.net core middleware for this. Instead you should be using a TelemetryInitializer. Given an intializer like this:

public class CustomInitializer : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        if (!(telemetry is DependencyTelemetry supportedTelemetry))
            return;

        if (supportedTelemetry.Type == "SQL" && supportedTelemetry.TryGetOperationDetail("SqlCommand", out var command))
        {
            foreach (DbParameter parameter in ((SqlCommand)command).Parameters)
            {
                supportedTelemetry.Properties.Add(parameter.ParameterName, parameter.Value.ToString());
            }
        }
    }
}

我不知道你为什么说
我迁移到. Net Core 3,在那里我无法再使用TelemetryInitializer,因为. Net Core 3禁用了同步IO
我一直在使用遥测初始化程序。
我在App Insights中将参数视为自定义属性:

供参考:我在控制器中使用了以下代码,基于this tutorial

using (var bc = new BloggingContext())
{
    bc.Database.EnsureCreated();
    await bc.Blogs.AddAsync(new Blog
    {
        Url = "www.blank.com",
        Rating = 0
    });
    await bc.SaveChangesAsync();
}

相关问题