我有一个一直在开发的 .NET 8 Azure Function 应用程序,这是我创建的第一个 .NET 8 应用程序,尽管自 .NET Core 3.1 以来我一直在开发函数应用程序。
我确信这是我所缺少的非常基本的东西,但我看不出是什么。
这是我的
host.json
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "debug"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true
"excludedTypes": "Request"
}
}
}
}
这是功能:
[Function("MYFUNCNAME")]
public void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer)
{
_logger.LogError("LOCAL THIS IS AN ERROR MESSAGE WHICH IS LOGGED");
_logger.LogInformation($"THIS WONT BE LOGGED IN AI - THOUGH IT DOES SHOW IN THE CONSOLE");
_logger.LogDebug("THIS IS NOT LOGGED EITHER");
}
在控制台中我可以看到所有消息。
但是在应用程序见解中我只能看到错误消息。
我想要 AI 和控制台中的所有消息。
我不知所措,我有另一个功能应用程序,它具有相同的配置并且运行完美。我看不出功能应用程序中的配置或工作项目和非工作项目之间的应用程序见解之间有任何差异(工作项目在 .NET 6 上,非工作项目在 .NET 8 上)。
我可能会错过什么?
在隔离模式下使用 .net7 函数也有同样的问题,我猜你的旧函数应用程序没有在隔离模式下运行,而新函数应用程序可以?
如果是这种情况,那么您需要配置
LogFilterOptions
并删除 ApplicationInsightsLoggingProvider
这是在你的hostBuilder中完成的(在program.cs中找到)
您只需在
services.ConfigureFunctionsApplicationInsights()
调用后添加以下内容即可。
services.Configure<LoggerFilterOptions>(options =>
{
var appInsightsLoggerProvider = options.Rules.FirstOrDefault(rule => rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (appInsightsLoggerProvider != default) options.Rules.Remove(appInsightsLoggerProvider);
});
它没有很好的记录,至少我不这么认为,但是如果你谷歌“azurefunctionsdotnetisolatedprocessguide”,有一个微软学习页面讨论了孤立的模型 - 它在那里没有明确讨论但是 代码示例之一(在启动和配置部分)包含与上面的代码非常相似的内容。
之后应该可以工作了。