Azure Functions 隔离日志记录

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

我目前正在编写一个Azure Function,并查看了Azure Function的文档。 本文档建议删除应用程序见解的默认规则:https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows#managing-log-levels

应用程序的其余部分将继续与 ILogger 和 ILogger 配合使用。但是,默认情况下,Application Insights SDK 添加一个日志记录筛选器,指示记录器仅捕获警告和更严重的日志。如果您想禁用此行为,请在服务配置中删除过滤规则

LoggerFilterRule defaultRule = options.Rules.FirstOrDefault(rule => rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (defaultRule is not null)
{
   options.Rules.Remove(defaultRule);
}

但是本文档建议通过 host.json 来完成此操作https://learn.microsoft.com/en-us/azure/azure-monitor/app/worker-service#ilogger-logs

需要注意的是,以下示例不会导致 Application Insights 提供程序捕获信息日志。它不会捕获它,因为 SDK 添加了一个默认日志记录过滤器,指示 ApplicationInsights 仅捕获警告日志和更严重的日志。 Application Insights 需要显式覆盖。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

但这似乎对我调试并检查加载了哪些规则时添加的默认过滤规则绝对没有影响。即使在 host.json 中更新后,此过滤规则似乎仍设置为警告。

Image from Visual Studio Debugger showing the default app insights rule - log level set to warning

所以问题真的是,有什么方法可以控制 host.json/configuration 的行为吗?

azure azure-functions
1个回答
0
投票

将此添加到您的配置中:

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

您需要明确配置

Logging:ApplicationInsights:LogLevel
。仅设置顶级
Logging:LogLevel
会被来自
Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider
的默认值覆盖(您提到的其他文档建议删除)。您可以通过设置
Logging:ApplicationInsights:LogLevel
来配置它,而不是删除它。

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