为 azure 函数设置日志记录的最简单方法是什么?

What is the simplest way to set up logging for an azure function?

在我的 azure 函数代码中,我使用了依赖注入提供的 ILogger。代码如下所示:

public QueueTriggerFunction(IConfiguration configuration,
    ILogger<QueueTriggerFunction> logger)
{
    _config = configuration;
    _logger = logger;
    _logger.LogInformation("Creating QueueTriggerFunction");
}


[FunctionName("QueueTrigger")]
public async Task Run([QueueTrigger("%AzureStorage:Queue%")] AzureQueueModel task, IBinder binder)
{
    _logger.LogInformation($"C# Queue trigger function processed: {task}");

当我在 Azure 中发布此代码并 运行 时,我希望能够在某个地方看到日志,但我不知道在哪里。我一直在努力阅读这个,但我无处可去。我看到很多人提到了“Application Insights”。你必须使用那个吗?理想情况下,我只想以某种方式查看我的日志消息。

我有 host.json 看起来像这样的文件。我知道这对日志记录有一定的重要性:

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information"
    }
  }
}
  1. 创建 Azure 函数队列触发器 到 Visual Studio 2022。

  2. 通过 NuGet 包管理器Application Insights 包添加到项目中,即,

  3. 从 Visual Studio 发布项目时,配置 Application Insights

  4. 配置(创建 App Insights 实例)后,您将获得 App Insights 连接字符串 > 获取将它们复制到任何文本编辑器中,然后单击“下一步”>“完成”。

  5. local.settings.json 文件中,添加 Instrumentation Key 值

  1. 将项目发布到 Azure 门户中的函数应用程序,并启用“设置”菜单下的 App Insights。

运行 本地函数:

在 Azure 门户中:

  1. 在浏览器的一个选项卡中打开功能应用程序存储帐户,在另一个选项卡中打开您的功能。当 运行 这个函数时,在其中创建一个队列和消息以检查函数是否 运行 好。

  1. 在测试window中可以在上面的控制台看到队列中发生一次插入的日志。此外,您还可以在门户中函数应用的概览窗格中查看服务器请求、执行计数、内存使用情况。

  1. 您可以看到指标日志,例如响应时间 队列中的请求执行计数服务器故障,等等。在监控菜单的指标下。

  1. 当运行功能如下时,您还可以在监控菜单下查看日志流

查看文件系统日志以及Application Insights日志s 通过切换到日志流中的所需选项:

  1. 您还可以使用 KQL 查询查看日志。
  2. 查看 Application Insights 资源中的实时指标 数据,如下所示:

我的host.json:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            }
        }
    }
}

要了解有关 Application Insights 资源中实时指标流和日志的更多信息,请参阅此 Microsoft Documentation

如果你的函数项目中有依赖项,要启用依赖项日志,请参考这个Host.Json configuration documentation,它提供了关于性能计数器日志记录的完整日志记录数据,依赖日志、超时值定义等

更新答案:

是的,您还可以使用门户中提供的 TimeRange 选项检查以前的(旧)日志,如下所示:

此外,指标 可用于函数的先前和当前执行计数、请求计数、响应计数、服务器失败次数等

参考文献:

  1. Application Insights Overview & Configuring
  2. Azure Functions Streaming Logs

我设置了完整的 sample 和工作日志。最关键的部分是您要么需要使用注入到触发器中的记录器进行记录,要么需要显式启用在构造函数中注入的记录器。在这种情况下,日志级别 default 可能不够。否则,您只会在实时视图中看到日志,但它们实际上并未存储在应用洞察中。

另见 https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services

The host injects ILogger and ILoggerFactory services into constructors. However, by default these new logging filters are filtered out of the function logs. You need to modify the host.json file to opt-in to additional filters and categories.

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    },
    "logLevel": {
      "Functions_V3_sample": "Information"
    }
  }
}