C# Azure Functions and Application Insights - LogError 不显示异常

C# Azure Functions and Application Insights - LogError not showing exception

当 运行 C# v3 函数应用程序时,我在使用 Application Insights 时遇到了一些问题。按照说明,一切都在 Azure 中设置以使用应用程序洞察力。在 host.json 文件中,我包含了以下设置:

"logging": {
    "LogLevel": {
      "Default": "Information"
    },
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  },

我正在使用依赖注入,所以在应用程序中启动 class,然后在需要的地方注入 ILogger class:

using Microsoft.Extensions.Logging;

...

builder.Services.AddLogging();

在代码中有几次我捕获异常、处理它并想记录它而不是抛出异常。例如。寻找一个可能存在或可能不存在的 blob 容器图像 - 我仍然可以 return 一个有效的响应,而不是因为一个微不足道的问题而抛出整个东西。

但是,Application Insights 似乎没有在跟踪中记录异常,即使它已传递给记录器:

catch (ArgumentException e)
{
     var msg = $"Error encountered blah blah blah";
     logger.LogWarning(e, msg);
     return Result.Failure<string>(msg);
}

我可以在 Application Insights 中看到正在记录的警告以及消息,但跟踪中的 message/custom 维度始终缺少堆栈跟踪。如果我使用 LogError.

也会发生同样的情况

顾客:

traces
| where cloud_RoleName == "my-app" and severityLevel == 2

我在这里查看了大量文档和问题,但很难找到有效的答案,或者能够很好地解释正在发生的事情。 Azure Functions + App Insights 似乎非常像“如果你打开它就会神奇地工作”,或者答案是针对 ASP.NET 核心的,或者只是过时了。

只有应用程序抛出的异常才会出现在 App Insights 的异常区域并带有堆栈跟踪的问题吗? (如果是这样,你能在这里记录错误而不抛出异常吗?)

我是否在 host.json 或启动中缺少配置的关键位?图书馆? (我已经尝试添加 Microsoft.Azure.WebJobs.Logging.ApplicationInsights)

如果有必要,我也在考虑改用 Serilog + App Insights 接收器 - 但当它看起来应该“开箱即用”时,我并不是特别想这样做。

有人能帮忙吗?

感谢@PeterBons 的帮助,为了让您记录的异常出现在 App Insights 的异常 table 中,您需要确保:

  1. 如果您使用抽样,请将“例外”添加到 host.json 中的“samplingExcludedTypes”以确保它们都被记录

  2. 您需要在您的项目中引用“Microsoft.Azure.WebJobs.Logging.ApplicationInsights”nuget 包(我保留其他所有内容并删除了这个 - 繁荣,没有记录到异常)