与 Azure Application Insights、ASP.NET MVC 和 NLog 的活动关联

2024-01-15

如何设置混音?我配置没有问题应用洞察 and NLog但我不知道如何关联操作。我使用最新版本的NLog所以它知道System.Diagnostics.Trace.CorrelationManager.ActivityId以其${activityid}多变的。另一方面应用洞察使用它自己的关联机制。我的问题是:

  1. 谁负责初始化标准Trace.CorrelationManager.ActivityId?我以为是ASP.NET MVC但在调试器中它总是Guid.Empty。如果由我决定,MVC 管道中生成 id 的最佳位置在哪里?
  2. 怎么做应用洞察 use Trace.CorrelationManager.ActivityId?或者,使NLog use 应用洞察' 内部相关 ID?
  3. 如何确保 ID 在任何设备上正确传播/恢复Task.Run() and await calls?

Update:

以下是我将 AI 链接到 NLog 的最终结果:

    private void Log(LogEventInfo lei)
    {
        lei.Properties["OperationId"] = CorrelationManager.GetOperationId();
        this.logger.Log(lei);
    }

这是包装结束NLog's 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);
}

Now, If AI已为您的应用程序启用NLog日志与相关AI log.


如果您在 .net core 应用程序中使用 Application Insights 2.1+(也可能是 .net 框架,但我尚未测试),它们会自动设置System.Diagnostics.Activity.Current到一个包含您可能想要的所有 Application Insights 信息以及更多信息的对象(ref https://github.com/Microsoft/ApplicationInsights-aspnetcore/issues/504).

在代码中您可以使用System.Diagnostics.Activity.Current?.Id or System.Diagnostics.Activity.Current?.RootId。 (使用调试器检查Activity.Current看看还有什么可以了解不同的博客标签将输出什么)

要使用 nlog 记录它,您可以使用NLog.DiagnosticSource 包 https://github.com/NLog/NLog.DiagnosticSource:

  1. 安装包

    Install-Package NLog.DiagnosticSource或者在您的 csproj 中:

    <PackageReference Include="NLog.DiagnosticSource" Version="1.*" />
    
  2. 添加到您的 nlog.config:

    <extensions>
        <add assembly="NLog.DiagnosticSource"/>
    </extensions>
    
  3. 添加到 nlog 目标:

Use ${activity:property=TraceId}(或用 Id 代替 TraceId,或其中之一他们列出的许多其他属性 https://github.com/NLog/NLog.DiagnosticSource) in a <target>, e.g.:

<extensions>
    <add assembly="NLog.DiagnosticSource"/>
</extensions>
<targets>
    <target name="console" xsi:type="console" layout="${message}|TraceId=${activity:property=TraceId}" />
</targets>
<rules>
    <logger minLevel="Info" writeTo="console" />
</rules>

这将输出类似以下的日志消息:

My log message|TraceId=921af8f6ba994c9eb3832ebf200846d7

或使用Id代替TraceId

My log message|Id=00-921af8f6ba994c9eb3832ebf200846d7-0e8ba5571915864b-00
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与 Azure Application Insights、ASP.NET MVC 和 NLog 的活动关联 的相关文章

随机推荐

  • 带有整数和小数转换的 Sql Server SUM 函数

    最近 我正在研究 SQL Server 数据类型和表中的大量数据 并尝试计算 Varchar 和数字数据的性能 但是 我遇到了一些我认为不应该出现的错误 但事实确实如此 我的问题如下 我有一张桌子 create table sa f1 va
  • angular2 / RxJS - 如何从 subscribe() 内部重试

    这是我的代码 this api getCompanies subscribe res gt this companies JSON parse res exception gt if this api responseErrorProces
  • 为所有用户创建 PHP 会话还是仅为那些想要登录的用户创建 PHP 会话?

    目前 我的 CMS 为每个访问该网站的用户创建一个 PHP 会话 我正在考虑只为想要登录的用户创建一个会话 我这里遇到的问题是 登录用户的一些 UI 元素位于所有页面上 因此在每个页面请求中 系统都必须检查用户是否是已登录 这意味着我没有其
  • 我的 GCP 项目正在自动创建存储桶

    我在 Google App Engine 上部署了一个 node js API 它使用云存储来存储文件 我创建了一个存储桶 其标题为
  • XML 代码注释中对泛型类型的引用 [重复]

    这个问题在这里已经有答案了 据我所知 在 C 类型 方法的 XML 注释中 可以在标签中引用泛型类型 如下所示
  • KendoUI 网格/数据源中的自定义排序

    我将 dataSource 中的数据分组为 var dataSource new kendo data DataSource transport read url and some other parameters specified gr
  • Objective-C 库 - 无法形成对类实例的弱引用

    我目前正在使用 Objective C 的 XMPP 库 并且正在使用 桌面 示例代码 它登录正常 但是 当我打开新聊天或有人向我发送消息时 它会崩溃 这似乎是出了问题的地方 XMPPStream 11678 1b03 RECV 2012
  • npm 安装失败 EPROTO 获取请求失败

    当我尝试从 npm 安装软件包时 出现获取失败错误 我设置了 npm 的配置 将 strict ssl 设置为 false 设置注册表https registry npmjs org https registry npmjs org 设置代
  • 捆绑安装在 capistrano 中不起作用

    我想部署我的简单rails 4 0申请通过capistrano 3 0 I use bundler 1 3 5所以我添加Capistrano 捆绑器 https github com capistrano bundlergem 将捆绑器与
  • Java中的特殊字符

    java中如何使用特殊字符 它们属于 Cp1252 字符编码 我尝试在消息中使用它们 但无法使用它们 类似字符 de 使用关联的 UTF 值 例如在http www fileformat info info unicode char sea
  • Python 转换为数组时出现内存错误

    我的代码如下所示 from sklearn datasets import load svmlight files import numpy as np perm1 np random permutation 25000 perm2 np
  • EF5 Code First - 通过迁移更改列类型

    我是 EF5 Code First 的新手 在开始工作项目之前我正在修改概念验证 我最初创建了一个看起来像这样的模型 public class Person public int Id get set public string First
  • 如何使视图列不为空

    我正在尝试创建一个视图 其中我希望列仅为 true 或 false 然而 似乎无论我做什么 SQL Server 2008 都认为我的位列可能以某种方式为空 我有一个名为 产品 的表 其中 状态 列是INT NULL 在视图中 我想为 Pr
  • 使用 remix run 将数据发送到服务器

    我在使用 remix run 将数据发送到服务器时遇到问题 我不确定我是否完全理解 useAction 数据的工作原理 我了解 useLoaderData 函数的工作原理 但是当您尝试将数据发送到服务器时 我会收到错误 我想要做的是当我单击
  • 当使用最新的 Monodevelop 和 VS 2012 RC 共享代码时我遇到问题

    当使用最新的Monodevelop和VS 2012 RC来共享代码时 我可以从运行 MonoDevelop 的 Mac 和运行最新 VS 2012 beta 的 Windows 7 PC 加载和使用 sln 解决方案 csproj 项目文件
  • 如何在Excel中将数字保存为字符串?

    如何在Excel中将数字保存为字符串 当我尝试输入数字 00112233 时 Excel 自动将其格式设置为 112233 并将其保存为数字 但我希望前面的 0 不被截断并将数字保存为字符串 作为解决方法 我使用引号 来保存实际的字符串 有
  • Crispy-Forms 包含标签导致许多重复模板

    我有一个 Django 站点 它使用下面的模板来呈现一个 Cripy Forms 模型表单集 使用django debug toolbar 我推测include标签多次渲染 bootstrap4 模板 我认为这就是影响我性能的原因 即加载包
  • + 是什么意思?正则表达式中的意思? [复制]

    这个问题在这里已经有答案了 我见过 正则表达式中有很多 但我不确定它真正代表什么 我知道 means 1或更多 并且 means 0 or 1 也是如此 means 0或者更多 在这种情况下 为什么不直接使用 意思是0或者更多 我只需要知道
  • Pygame 淡入黑色函数

    我正在使用 pygame 最新版本在 python 3 中编写游戏 我有一个功能 旨在慢慢淡出屏幕 直到全黑 它应该通过在屏幕上多次位块传输低 alpha 黑色表面来实现 但是当我测试它时 它只会阻止游戏直到循环完成 我怀疑 black s
  • 与 Azure Application Insights、ASP.NET MVC 和 NLog 的活动关联

    如何设置混音 我配置没有问题应用洞察 and NLog但我不知道如何关联操作 我使用最新版本的NLog所以它知道System Diagnostics Trace CorrelationManager ActivityId以其 activit