c# - Application Insight 中的范围日志记录

标签 c# logging .net-core azure-application-insights

我们有一个 .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);
            }

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

enter image description here

我有以下问题:

  1. 范围日志记录在 Application Insight 中如何工作?
  2. 这是查看范围信息的唯一方式吗?
  3. 有没有办法查看一个范围内的所有日志?
  4. 为什么结构化日志记录不适用于{Original Format}?

最佳答案

Scopes 日志现在可以在 Application Insights 中使用(我使用的是 2.19.0 版)。与其将格式字符串 + 参数传递给 BeginScope(),不如传递一个名称-值对字典,例如

using (logger.BeginScope(new Dictionary<string, object> 
         { { "TaskId" = taskId }, { "Action", "AssigningTask" } }))
{
    .. 
    logger.LogInformation("{taskId} is assigned", taskId);
    ...
}

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

关于c# - Application Insight 中的范围日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250730/

相关文章:

python : clear a log file

azure - AppInsight 日志错误未显示问题

c# - 从另一个文件访问私有(private)类

C# 如何制作 GetEnumerator() 的递归版本

c# - 使用 DesignMode 属性与 LicenseManager.UsageMode

google-chrome - 如何在控制台中隐藏应用程序缓存事件?

c# - 统一容器可以注册内部类的类型吗?

logging - Apache Zookeeper 设置的不明确文档

.net-core - RestSharp v107 和依赖注入(inject) : Use Singleton?

asp.net-core - ASP.NET Core Swagger 无法在 Chrome 中使用 CORS 错误