首页 > 解决方案 > 限制从我的应用服务发送到 appinsight 的日志消息

问题描述

我的应用服务正在使用 TelemetryClient 登录到 appinsights。这工作正常,我按预期记录了所有内容。我遇到的问题是它现在记录的太多了,而我的 appinsights 成本太高了。我需要通过仅捕获警告和错误来减少日志记录,但如果出现问题,则能够记录调试和跟踪消息。我通过将过滤器添加到函数的 host.json 文件的日志记录部分来使用我的 Azure 函数完成此操作。是否有类似的方法可以对应用服务项目执行此操作,以便我可以通过门户更改日志级别过滤,而不必重新编译和部署新版本?

我的 Azure 函数的 host.json 如下所示。我在为我的应用服务网站寻求类似的东西:

"logging": {
    "fileLoggingMode": "always",
    "logLevel": {
        "Function": "Warning",
        "Default": "Warning",
        "System": "Information",
        "Microsoft": "Warning",
        "Microsoft.AspNetCore.Mvc.Internal": "Information",
        "Microsoft.AspNetCore.Authentication": "Information"
    }
}

标签: .netloggingazure-web-app-service

解决方案


Azure 监视器提供了一种为 ASP.NET Core 配置 LogLevel 的简单方法。过滤可以在配置中(通常使用appsettings.json文件)或代码中完成。

以下示例由官方文档提供:使用 appsettings.json 在配置中创建过滤规则

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Warning",
        "Microsoft": "Error"
      }
    },
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

更新:对于 asp .net,我发现ApplicationInsights.config可以指定遥测模块级别。以下是有关EventSource 事件的示例。

    <Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener">
      <Sources>
        <Add Name="MyCompany" Level="Verbose" />
      </Sources>
    </Add> 

推荐阅读