使用 tflog 包比使用 log 包进行日志记录有什么优势?

What're the advantages of using tflog package over log package for logging?

上下文:我正在开发一个 TF 提供程序,我可以看到来自 HashiCorp 的最新 "Writing Log Output" doc,他们建议使用 tflog 包进行日志记录。

也就是说,我可以看到 GCP 的 TF 提供程序仍然是 using log 包。使用 tfloglog 有什么优势?

您链接的文档的

The Structured Logging section 描述了作者推荐这种不同日志记录策略的理由:

The tflog package uses structured logging, based on go-hclog. Rather than writing logs as sentences with embedded variables and values, tflog takes a sentence describing the logging event and a set of variables to log. When variables are separate from the log description, you can use them to programmatically parse, filter, and search log output. This separation also allows other parts of the system to associate variables with downstream log output.

虽然没有在文档中明确提及作为优势,但它确实也提到 tflog 有日志级别的概念,并且在撰写本文时 the standard library log package 中没有相应的概念。

鉴于此,我认为 tflog 相对于标准库 log 的两个预期优势是:

  • tflog 使用结构化日志记录方法,其中结果中的单独变量是 machine-parsable,因此可以通过脚本进行自动过滤。
  • tflog 将日志级别与每条消息相关联,并且 SDK 允许 customizing the log level for a particular execution 控制输出量。

我认为要获得关于此的任何进一步背景信息需要询问 SDK 的作者,因为这是一种主观的设计权衡,而不是存在一个明确的正确答案的情况。

我假设一些现有的提供商继续使用标准库 log 只是因为该代码是在 tflog 存在之前编写的。 tflog v0.2.0(显然是第一个 publicly-published 版本)于 2021 年 12 月发布,而像 Google 云平台提供商这样的大型 Terraform 提供商在此之前已经开发了将近十年。