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 错误的操作/异常?