问题描述
在运行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表中,您需要确保:
如果您使用的是采样,则将";Exception";添加到您的Host.json中的";samplingExcludedTypes";以确保它们都被记录下来
您需要在您的项目中引用";Microsoft.Azure.WebJobs.Logging.ApplicationInsights";Nuget包(我保持其他所有内容不变,并删除了这个-bob,不记录到异常)
这篇关于C#Azure函数和应用程序洞察-日志错误未显示异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!