C#Azure函数和应用程序洞察-日志错误未显示异常 [英] C# Azure Functions and Application Insights - LogError not showing exception

查看:42
本文介绍了C#Azure函数和应用程序洞察-日志错误未显示异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在运行C#v3 Function App时,我在使用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核心的,或者就是完全过时了。

只有应用抛出的异常才会以堆栈跟踪显示在App Insights的异常区域中,这是不是有问题?(如果是,是否可以在不引发异常的情况下在此处记录错误?)

我是否在Host.json或启动中遗漏了配置的关键部分?图书馆?(我已经尝试添加Microsoft.Azure.WebJobs.Logging.ApplicationInsights)

我还考虑在必要时改用Serilog+App Insights接收器,但我不是特别想这样做,因为它看起来应该开箱即用。

有人能帮忙吗?

推荐答案

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

  1. 如果您使用的是采样,则将";Exception";添加到您的Host.json中的";samplingExcludedTypes";以确保它们都被记录下来

  2. 您需要在您的项目中引用";Microsoft.Azure.WebJobs.Logging.ApplicationInsights";Nuget包(我保持其他所有内容不变,并删除了这个-bob,不记录到异常)

这篇关于C#Azure函数和应用程序洞察-日志错误未显示异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆