如何为 Application Insights NLog 目标设置上下文

Posted

技术标签:

【中文标题】如何为 Application Insights NLog 目标设置上下文【英文标题】:How to set context for Application Insights NLog Target 【发布时间】:2016-08-23 11:11:49 【问题描述】:

我在我的 WPF 应用程序和 NLog 中使用 Microsoft Application Insights 来记录异常和调试信息。因此,我将 Application Insights NLog Target 添加到应用程序中。但是此 NLog 目标记录的所有事件都不包含 Azure 门户上的上下文数据。

使用 TelemetryClient 记录的其他事件包含这些数据。

 var telemetryClient = new TelemetryClient();
        telemetryClient.InstrumentationKey = "xxx";
        telemetryClient.Context.User.Id = Environment.UserName;
        telemetryClient.Context.Session.Id = Guid.NewGuid().ToString();

        //var config = new LoggingConfiguration();
        ConfigurationItemFactory.Default.Targets.RegisterDefinition(
                    "ai",
                    typeof(ApplicationInsightsTarget)
                );

        ApplicationInsightsTarget aiTarget = new ApplicationInsightsTarget();
        aiTarget.InstrumentationKey = "xxx";
        aiTarget.Name = "ai";
        LogManager.Configuration.AddTarget("ai", aiTarget);

        LogManager.Configuration.AddRule(LogLevel.Info, LogLevel.Info, aiTarget);

        LogManager.Configuration.Reload();
        LogManager.ReconfigExistingLoggers();

我的问题是 - 是否可以将此上下文数据也用于 NLog Target 记录的事件?或者,如何为 NLog 设置上下文数据?

【问题讨论】:

【参考方案1】:

您可以使用TelemetryInitializer 来确保创建的所有项目都获得您想要的上下文?

修改示例来自: http://apmtips.com/blog/2014/12/01/telemetry-initializers/

namespace ApmTips.Tools

    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.Diagnostics.Tracing;
    using System.Diagnostics;

    public class ExtendedIDTelemetryInitializer : ITelemetryInitializer
    
        public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
        
            telemetry.Context.[some field] = [some value];
        
    

您还需要注册该初始化程序等,相关说明在上面的帖子中,有几种方法可以做到。

(但不要使用ContextInitializer,它与您认为的名称不符)并且: http://apmtips.com/blog/2015/06/09/do-not-use-context-initializers/

【讨论】:

以上是关于如何为 Application Insights NLog 目标设置上下文的主要内容,如果未能解决你的问题,请参考以下文章

API Application Insights 使用的良好实践

Application Insights 数据采样

ILogger 到 Application Insights

Application Insights URL 分组

Azure Application Insights 不显示数据

更改 Application Insights 的位置?