首页 > 解决方案 > 避免从功能应用程序中登录应用程序洞察力的严重级别 0

问题描述

在我的 azure 解决方案中,我有 1 个应用服务和 2 个功能应用记录到 1 个应用程序洞察实例。在特定环境中,我想减少日志记录负载,所以我想摆脱严重级别 0 的日志。

我目前专注于其中一个功能应用程序,我们称之为fa1。正如预期的那样,我使用 ILogger 作为 LogDebug 添加的日志记录语句没有显示在应用程序洞察中。但是,我可以在应用程序洞察中看到以下条目:

我还看到以下条目,但我不知道哪个服务正在生成它们:

主机.json:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "Function": "Warning",
      "default": "Warning"
    }
  }
}

启动。配置():

builder.Services.AddLogging(loggingBuilder =>
{
    var key = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
    loggingBuilder.AddApplicationInsights(key);
});
builder.Services.AddSingleton(sp => // Needed for injected ILogger<> to log in AI
{
    var key = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
    return new TelemetryConfiguration(key);
});

我也试过loggingBuilder.AddApplicationInsights(key).SetMinimumLevel(LogLevel.Warning);了。没有任何设置起作用,上面提到的日志条目不断出现。

请注意,我设置警告只是为了测试。最后我想要信息。

我能做些什么来摆脱那些严重级别为 0 的日志条目?

标签: azureazure-application-insightsazure-function-app

解决方案


看看这里的不同日志类别。

我想说减少日志记录,但保留重要信息,例如请求和依赖项,将Microsoft,WorkerFunction.<YOUR_FUNCTION_NAME>类别设置为 LogLevel 警告(或无),但保留Function.<YOUR_FUNCTION_NAME>.User所有其他信息。这将删除大部分日志记录,但会保留门户中可用的统计信息和成功/失败日志。

通过这样做loggingBuilder.AddApplicationInsights(key).SetMinimumLevel(LogLevel.Warning);,您只是更改了 Function 类别的日志级别,而不是其他类别。

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "Function.<YOUR_FUNCTION_NAME>": "Warning",
      "Function.<YOUR_FUNCTION_NAME>.User": "Information",
      "Microsoft": "Warning",
      "Worker": "Warning",
      "default": "Information"
    }
  }
}

该类别Function.<YOUR_FUNCTION_NAME>是一个棘手的类别。它会生成有用的日志和一些噪音。尝试将警告和信息作为日志级别,看看哪种最适合您。

编辑 您配置功能的方式是错误的。Application Insights 由 Azure Functions 自动添加(来源)。如果你想直接使用TelemetryClient你需要添加 NuGet 包 Microsoft.Azure.WebJobs.Logging.ApplicationInsights 就是这样。

默认集成将从host.json文件中获取配置。现在您正在手动设置日志记录,这将忽略设置,因为未加载配置。这就是为什么,例如,消息Poll for function '{name of function in fa1}' on queue '{...}' with ClientRequestId '{...}' 在 5 毫秒内发现 0 条消息。属于Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener类别的内容已记录且未过滤。因此,请删除您在问题中显示的代码。


推荐阅读