首页 > 解决方案 > 应用洞察记录——只记录我所说的,不记录其他

问题描述

我有一个 Azure Function V3(.net 核心)。我使用的 ILogger 来自 Microsoft.Extensions.Logging。我的问题是我做不到:

我想要执行此操作的确切host.json日志记录值。

只有我在 C# 代码中输入的内容,没有其他内容。

我的代码示例:

[FunctionName("GetNetworkHouseDetail")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "network/houseMonitoringDevices")] HttpRequest req, ILogger log, ClaimsPrincipal claims)
{
  try
  {
    var start = DateTime.UtcNow;

    // some actions

    var end = DateTime.UtcNow;
    var duration = (end - start).TotalSeconds;
    log.LogInformation($"API - GetNetworkHouseDetail: took {duration} second to finish");
    return new OkObjectResult(JsonConvert.SerializeObject(result));
  }
  catch (Exception ex)
  {
      log.LogError($"{ex.GetExceptionMessages()}", ex);
  }
}

标签: azure.net-coreazure-functionsazure-application-insights

解决方案


好吧,您可以为此使用日志级别。从文档

无需任何自定义配置即可使用 Application Insights。默认配置可能会导致大量数据。如果您使用的是 Visual Studio Azure 订阅,您可能会达到 Application Insights 的数据上限。在本文后面,您将了解如何配置和自定义函数发送到 Application Insights 的数据。对于函数应用,日志记录在 host.json 文件中配置。

通过使用 LogLevel None,您可以禁用给定类别和提供程序的所有日志记录。

例如,你可以做

{
  "version": "2.0",
  "logging": {
    "LogLevel": {
      "Default": "None",
      "Host.Results": "Information",
      "Host.Aggregator": "Information",
      "Function.MyFunction.User": "Information"
    },
  }
}

它将禁用除您的功能之外的所有日志记录。您编写的函数的日志类别是“Function.<YOUR_FUNCTION_NAME>.User.”。(将 <YOUR_FUNCTION_NAME> 替换为函数的实际名称,来自代码中的 FunctionName 属性)

不幸的是,您必须指定所有功能,不能包含诸如指定之类的通配符"Function.*.User": "Information"。您可以"Function": "Information"所有功能的日志级别设置为信息,但随后也会出现一些额外的日志记录。

将从日志记录中排除依赖性和请求跟踪。看到这个

如果您在任何时候想要包含请求和依赖项,您需要将所有以“功能”开头的类别的日志级别设置为Information.

您可能会禁用主机类别的日志记录,但它们是特殊类别,您现在可能想要这样做。


推荐阅读