我在我的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设置上下文数据?
答案 0 :(得分: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/