Azure Application insights中间件-跟踪SQL参数

Azure Application insights中间件-跟踪SQL参数,azure,azure-application-insights,asp.net-core-3.1,.net-core-3.1,Azure,Azure Application Insights,Asp.net Core 3.1,.net Core 3.1,问题:默认情况下应用程序洞察。我想启用参数跟踪或手动添加参数 小背景:我有一个带有应用程序洞察的.Net Core 2应用程序。我正在读取请求正文,并使用TelemetryInitializer将其保存为自定义属性。我迁移到.Net Core 3,在那里我无法再使用TelemetryInitializer作为.Net Core 3。描述了类似的问题。因此,我已经按照这个方法实现了ApplicationInsights中间件。我正在使用EF-Core进行所有数据库访问 问题:我发现这表示可以“在T

问题:默认情况下应用程序洞察。我想启用参数跟踪或手动添加参数

小背景:我有一个带有应用程序洞察的.Net Core 2应用程序。我正在读取请求正文,并使用
TelemetryInitializer
将其保存为自定义属性。我迁移到.Net Core 3,在那里我无法再使用
TelemetryInitializer
作为.Net Core 3。描述了类似的问题。因此,我已经按照这个方法实现了ApplicationInsights中间件。我正在使用
EF-Core
进行所有数据库访问


问题:我发现这表示可以“在TelemetryInitializer中访问SqlCommand操作详细信息”。但是如何使用application insights中间件实现这一点呢?

您不必为此编写asp.net核心中间件。相反,您应该使用遥测初始化器。给定这样一个初始化器:

公共类CustomInitializer:ITelemetryInitializer
{
公共无效初始化(ITelemetry遥测)
{
如果(!(遥测依赖遥测支持遥测))
返回;
if(supportedteletry.Type==“SQL”&&supportedteletry.TryGetOperationDetail(“SqlCommand”,out var命令))
{
foreach(DbParameter参数在((SqlCommand)command.Parameters中)
{
supportedTelemetry.Properties.Add(parameter.ParameterName,parameter.Value.ToString());
}
}
}
}
我不知道你为什么这么说

我迁移到.Net Core 3,由于.Net Core 3禁用了同步IO,我无法再使用TelemetryInitializer

我一直使用遥测初始化器

我在App Insights中将参数视为自定义属性:

仅供参考:我在控制器中使用了此代码,基于:

使用(var bc=new BloggingContext())
{
bc.Database.recreated();
等待bc.Blogs.AddAsync(新博客
{
Url=“www.blank.com”,
评级=0
});
等待bc.saveChangesSync();
}

如何使用SqlCommands等或实体框架(例如)访问数据库?使用EF Core。我将更新问题我也在阅读请求正文,但由于.Net Core 3我不想进行同步,并且
TelemetryInitializer
只有void方法。描述了类似的问题。所以我使用middlewre准备请求body异步。我想知道是否可以同时使用中间件和telemetryInitializer。您仍然可以将请求正文添加到您的请求telemetry中,例如。并使用建议的遥测初始值设定项将参数值作为属性记录到sql依赖项遥测中。可以使用operationId将请求和依赖项遥测关联起来。由于成本和速度的原因,我不会在所有遥测中记录完整的请求正文