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

时间:2018-06-11 11:42:55

标签: 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中配置一个检测密钥,因为现在我在本地运行。当我运行我的应用程序并在加载主页时强制异常时,我可以看到Visual Studio的遥测搜索Application Insights中记录的异常。

enter image description here

我现在想在每个记录的事件中捕获有关请求的一些细节。我已经遵循了一些指导并创建了ITelemetryInitializer的实现:

public class CustomTelemetryInitializer : ITelemetryInitializer
{
    private const string UserIdKey = "AsosUserId";

    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 guide之后。 IUserService只是一项使用IHttpContextAccessor获取当前ClaimsPrincipal的服务。您可以看到我尝试将用户ID添加到自定义遥测属性中。

我已在ITelemetryInitializer中注册了此Startup,如下所示:

services.AddSingleton<ITelemetryInitializer, CustomTelemetryInitializer>();

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

我已经尝试将应用洞察初始化从Program移出,而是在使用Startup注册ITelemetryInitializer之后在services.AddApplicationInsightsTelemetry()初始化它,但这不会差。

任何人都知道我做错了什么?

更新1

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

1 个答案:

答案 0 :(得分:2)

很高兴你明白了。 SDK中的所有ITelemetry实现都会ISupportProperties为其提供Properties集合。如果要将属性附加到每个遥测,可以转换为ISupportProperties并设置道具。