get*_*ode 5 c# azure azure-application-insights asp.net-core
(在下面添加了更新 1,我认为它回答了这个问题)
在一个相当简单的 ASP.NET Core 2 Web 应用程序中,我像这样初始化了Program
:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
Run Code Online (Sandbox Code Playgroud)
我还没有配置仪器密钥,appSettings.json
因为现在我在本地运行。当我运行应用程序并强制加载主页时出现异常时,我可以看到 Visual Studio 的 Application Insights 遥测搜索中记录了异常。
我现在想要捕获有关每个记录事件中的请求的一些详细信息。我遵循了一些指导并创建了以下实现ITelemetryInitializer
:
public class CustomTelemetryInitializer : ITelemetryInitializer
{
private const string UserIdKey = "UserId";
private readonly IUserService _userService;
public CustomTelemetryInitializer(IUserService userService)
{
_userService = userService;
}
public void Initialize(ITelemetry telemetry)
{
if (!(telemetry is RequestTelemetry requestTelemetry)) return;
var props = requestTelemetry.Properties;
if (!props.ContainsKey(UserIdKey))
{
var user = _userService.GetCurrentUser();
if (user != null)
{
props.Add(UserIdKey, user.UserId);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很大程度上遵循本指南。IUserService
只是一个用于IHttpContextAccessor
获取当前ClaimsPrincipal
. 您可以看到我正在尝试将用户 ID 添加到自定义遥测属性中。
我已经这样注册ITelemetryInitializer
了:Startup
services.AddSingleton<ITelemetryInitializer, CustomTelemetryInitializer>();
Run Code Online (Sandbox Code Playgroud)
当我再次运行我的应用程序时,我可以看到调试器正在运行CustomTelemetryInitializer
并正确设置属性。但是,当我查看应用程序见解中记录的事件时,不包括自定义属性。它们看起来与上面的屏幕截图相同。
我尝试将应用程序见解初始化移出Program
,而是Startup
在注册ITelemetryInitializer
using后对其进行初始化services.AddApplicationInsightsTelemetry()
,但这没有什么区别。
有人知道我做错了什么吗?
更新1
我已经意识到我犯了一个错误。毕竟,我的自定义属性已包含在请求事件中。但不是异常事件。但我现在意识到这些异常事件ITelemetry
在Initialize
ie中采用不同的实现TraceTelemetry
。所以我没有意识到我将这些事件从我的自定义属性中排除。
很高兴你想出来了。ITelemetry
SDK 中的所有实现都实现了,ISupportProperties
这给了它Properties
集合。如果您想将属性附加到每个遥测数据,您可以投射ISupportProperties
并设置道具。
归档时间: |
|
查看次数: |
6050 次 |
最近记录: |