c# - Application Insights 不包括自定义 ITelemetryInitializer 设置的属性

标签 c# azure asp.net-core azure-application-insights

(在下面添加了更新 1,我认为它回答了这个问题)

在一个相当简单的 ASP.NET Core 2 Web 应用程序中,我在 Program 中初始化如下:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .Build();

我尚未在 appSettings.json 中配置检测 key ,因为目前我在本地运行。当我运行应用程序并强制加载主页时出现异常时,我可以看到 Visual Studio 的 Application Insights 遥测搜索中记录了异常。

enter image description here

我现在想要捕获有关每个记录事件中的请求的一些详细信息。我遵循了一些指导并创建了 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);
            }
        }
    }
}

这很大程度上遵循this guideIUserService 只是一个使用 IHttpContextAccessor 获取当前ClaimsPrincipal 的服务。您可以看到我正在尝试将用户 ID 添加到自定义遥测属性中。

我已经在 Startup 中注册了这个 ITelemetryInitializer,如下所示:

services.AddSingleton<ITelemetryInitializer, CustomTelemetryInitializer>();

当我再次运行应用程序时,我可以看到调试器通过 CustomTelemetryInitializer 运行并正确设置属性。但是,当我查看应用程序见解中记录的事件时,不包括自定义属性。它们看起来与上面的屏幕截图相同。

我尝试将应用洞察初始化从 Program 中移出,并在使用 注册 ITelemetryInitializer 后在 Startup 中对其进行初始化services.AddApplicationInsightsTelemetry(),但这没有什么区别。

有人知道我做错了什么吗?

更新1

我意识到我犯了一个错误。毕竟,我的自定义属性已包含在请求事件中。但不是异常事件。但我现在意识到这些异常事件在 Initialize 中采用了不同的 ITelemetry 实现,即 TraceTelemetry。所以我没有意识到我将这些事件从我的自定义属性中排除。

最佳答案

很高兴你明白了。 SDK 中的所有 ITelemetry 实现都实现了 ISupportProperties,它提供了 Properties 集合。如果您想为每个遥测数据附加属性,您可以转换为 ISupportProperties 并设置 props。

关于c# - Application Insights 不包括自定义 ITelemetryInitializer 设置的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50796925/

相关文章:

c# - 限制对远程 api 的并行请求

c# - Listbox.Contains 包含 "Like"运算符

asp.net-mvc - Azure部署

Azure Workbooks 条形图不会像 azure 分析日志查询那样按第三列值拆分数据

c# - 在 ASP.NET Core 中流式传输后如何删除文件

c# - 从路由名称获取相对路径

c# - 我如何运行 Ghost 脚本命令

c# - ConfigureAwait 是否只影响非线程池线程?

azure - 从 Azure 函数调用 ILogger.LogError 时可以输入什么 EventId?

c# - C# 新手,在使用 C# 枚举和类型转换进行计算时遇到问题