Application Insight 中的范围日志记录

Posted

技术标签:

【中文标题】Application Insight 中的范围日志记录【英文标题】:Scope Logging in Application Insight 【发布时间】:2019-12-06 14:38:51 【问题描述】:

我们有一个 .net 核心 web api,并且我们使用了 Microsoft.Extensions.Logging 命名空间中可用的内置记录器。

我们已将此记录器与 Application Insight 集成。

我可以看到所有日志都被正确记录。但是,我看不到范围的日志记录信息

下面是我的代码:

var taskId = Guid.NewGuid();
            using (logger.BeginScope("Assigning Task taskId.",taskId))
            
               logger.LogInformation("taskId is assigned",taskId);
            

我可以看到此输出,其中范围日志信息保存在“原始格式”中。但是,结构化日志记录不适用于该字段:

我有以下问题:

    范围日志记录在 Application Insight 中的工作原理是什么? 这是查看范围信息的唯一方法吗? 有没有办法查看一个范围内的所有日志? 为什么结构化日志记录不适用于 Original Format?

【问题讨论】:

根据记录器的不同,需要明确启用范围的输出。例如,对于控制台记录器,您可以在 appsettings.json github.com/aspnet/Logging/issues/835#issuecomment-389567342 中配置 嗨@Dusan,我在appsettings.json中保留了“IncludeScopes”:true。要为 ApplicationInsight 启用它,还需要做些什么吗? 您使用的是什么版本的 Microsoft.ApplicationInsights.AspNet SDK? 2.7.0-beta2 之前的版本不支持 App Insights 的范围。 docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger 【参考方案1】:

现在在 Application Insights 中可以使用范围日志记录(我使用的是 2.19.0 版)。而不是将格式字符串 + 参数传递给 BeginScope() 您应该传递名称-值对的字典,例如

using (logger.BeginScope(new Dictionary<string, object> 
           "TaskId" = taskId ,  "Action", "AssigningTask"  ))

    .. 
    logger.LogInformation("taskId is assigned", taskId);
    ...

当然,这里将taskId放在内部日志消息中有点多余。

【讨论】:

以上是关于Application Insight 中的范围日志记录的主要内容,如果未能解决你的问题,请参考以下文章

最小 API .net 核心中的 Application Insight 日志记录

能否在实时应用程序中禁用或启用 Application Insight

Azure Application Insight工作项目授权错误

在 Application Insight 和 Postman 中获取时间差异

我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight

Kusto - 如何在 Azure Application Insight 中查找导致 524/5xx 错误的操作/异常?