【发布时间】:2017-01-21 03:38:14
【问题描述】:
如何设置混音?我配置 Application Insights 和 NLog 没有问题,但我不知道如何关联操作。我使用最新版本的 NLog 所以它知道System.Diagnostics.Trace.CorrelationManager.ActivityId 及其${activityid} 变量。另一方面,Application Insights 使用它自己的关联机制。我的问题是:
- 谁负责初始化标准
Trace.CorrelationManager.ActivityId?我以为是 ASP.NET MVC,但在调试器中它始终是Guid.Empty。如果由我决定,在 MVC 管道中生成 id 的最佳位置在哪里? - 如何让 Application Insights 使用
Trace.CorrelationManager.ActivityId?或者,让 NLog 使用 Aplication Insights 的内部关联 ID? - 如何确保 ID 在任何
Task.Run()和await调用中正确传播/恢复?
更新:
这是我最终将 AI 链接到 NLog 的结果:
private void Log(LogEventInfo lei)
{
lei.Properties["OperationId"] = CorrelationManager.GetOperationId();
this.logger.Log(lei);
}
这是 NLog 的 Log() 方法的包装,它添加了一个可以在 NLog.config 中引用为 ${event-context:OperationId} 的属性。 CorrelationManager 这是@Aravind 提供的链接中的解决方案。系统 CallContext 的使用保证了操作 Id 将流经所有异步点。现在,我们需要获取 AI 操作 id 并将其存储在 CorrelationManager 中。这是在Global.asax.cs 中完成的:
protected void Application_BeginRequest()
{
RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry();
string operationId = telemetry?.Id ?? Guid.NewGuid().ToString();
CorrelationManager.SetOperationId(operationId);
}
现在,如果您的应用启用了 AI,您的 NLog 日志将与 AI 日志相关联。
【问题讨论】:
-
谢谢。是的,我找到了它并用作我的实验的基础。
-
@UserControl 我正在为我工作的公司实施类似的解决方案,您最终找到了一个不错的解决方案吗?介意分享一下吗?也许我可以为它贡献一点。
-
@Mvision,这仍然是一个已解决的问题,但我已经用我目前使用的内容更新了我的问题。
标签: .net azure logging nlog azure-application-insights