C# Azure Functions 和 Application Insights - LogError 未显示异常

问题描述 投票:0回答:2

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

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

我正在使用依赖注入,因此在应用程序中有一个启动类,然后在需要的地方注入 ILogger 类:

using Microsoft.Extensions.Logging;

...

builder.Services.AddLogging();

在代码中,有几次我会捕获异常、处理它,并希望记录它而不是抛出异常。例如。寻找可能存在或可能不存在的 blob 容器图像 - 我仍然可以返回有效的响应,而不是因为一个简单的问题而抛出整个问题。

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

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

我可以在 Application Insights 中看到正在记录的警告以及消息,但跟踪中的消息/自定义维度始终缺少堆栈跟踪。如果我使用 LogError 也会发生同样的情况。

客户:

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

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

问题是只有应用程序抛出的异常才会显示在 App Insights 的异常区域中并带有堆栈跟踪吗? (如果是这样,您可以在此处记录错误而不引发异常吗?)

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

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

有人可以帮忙吗?

c# logging azure-functions azure-application-insights
2个回答
2
投票

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

  1. 如果您使用采样,请将“Exception”添加到 host.json 中的“samplingExcludedTypes”中,以确保它们全部被记录

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


0
投票

我也有同样的问题.. 我尝试使用

Microsoft.Azure.WebJobs.Logging.ApplicationInsights
,这会产生一些奇怪的问题,例如
AZFD0005: External startup exception 
,因为此 WebJob 会引入对 Function App 组件的一些依赖。 然后我就尝试了
**Microsoft.Extensions.Logging.ApplicationInsights**
遵循此处的指南: https://learn.microsoft.com/en-us/azure/azure-monitor/app/ilogger?tabs=dotnet6 这并没有真正让我得到我想要的东西。 直到我发现了这个: https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable?tabs=aspnetcore

安装此软件包

Azure.Monitor.OpenTelemetry.AspNetCore
仅添加这一行:
Services.AddOpenTelemetry().UseAzureMonitor();
给了我期望, 我正在记录的所有内容都会显示,EF 正在记录的所有内容也会显示。然后您可以控制严重性级别以在需要时减少日志。

© www.soinside.com 2019 - 2024. All rights reserved.