Application Insights:通过 .net core 3.1 控制台应用程序中的自定义 ITelemetryInitializer 添加云角色名称不会获取云角色名称

问题描述 投票:0回答:1

我正在使用 HostBuilder 在 Program.cs 中配置控制台应用程序。

ConfigureServices

services.AddSingleton<ITelemetryInitializer, CustomInitializer>(p => new CustomInitializer("my app", Guid.NewGuid().ToString()));

services.AddApplicationInsightsTelemetryWorkerService();

ConfigureLogging

logging.ClearProviders();
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddNLog(NLog.LogManager.LoadConfiguration("nlog.config").Configuration);
logging.AddApplicationInsights();

CustomInitializer.cs

class CustomInitializer : ITelemetryInitializer
{
    private readonly string _roleName;
    private readonly string _roleInstance;

    public CloudRoleNameInitializer(string name, string instance)
    {
        _roleName = name;
        _roleInstance = instance;
    }

    public void Initialize(ITelemetry telemetry)
    {
        telemetry.Context.Cloud.RoleName = _roleName;
        telemetry.Context.Cloud.RoleInstance = _roleInstance;
    }
}

如你所见,我也在使用 nlog。当我记录消息时,我可以看到云角色名称未设置为“我的应用程序”,而是设置为我的计算机名称。我在

ConfigureServices
部分尝试了几种可能性:

试用1:

services.Configure<TelemetryConfiguration>((config) =>
        {
            config.TelemetryInitializers.Add(new CustomInitializer("my app", Guid.NewGuid().ToString()));
        });

这不起作用。

试用2

TelemetryConfiguration.Active.TelemetryInitializers.Add(new CustomInitializer("my app", Guid.NewGuid().ToString()));

这工作得很好,但我不断收到 IDE 警告,说这在 .net core 中已经过时了

我检查了所有文档,没有任何内容可以让我对使用

TelemetryConfiguration.Active
的替代品有一个好主意。似乎大多数示例都是针对 .net core Web 应用程序而不是控制台。

.net-core console-application azure-application-insights nlog .net-core-3.1
1个回答
0
投票

NLog 似乎使用 TelemetryConfiguration.Active 来创建 TelemetryClient,因此所有 ITelemetryInitializer 都将被忽略。

我的解决方案是为应用程序洞察添加以下设置

"ApplicationInsights": {
    "ConnectionString": "xxx",
    "EnableActiveTelemetryConfigurationSetup": true 
},

EnableActiveTelemetryConfigurationSetup == true 似乎会自动将遥测设置从 ServiceCollection 传播到 TelemetryConfiguration.Active。

© www.soinside.com 2019 - 2024. All rights reserved.