Python,如何设置jsonPayload的日志格式

Python, how to set log formatting for jsonPayload

我正在尝试将 JSON 格式的数据日志从 Google 云 运行 写入云日志记录。 但是当我在Cloud logging中查看我的日志时,我的数据日志在jsonPayload的消息字段中,作为字符串类型。

喜欢,

jsonPayload: {
  message: "{"test": "testing"}"
  python_logger: "cloudLogger"
}

但是,如我所料,

jsonPayload: {
  test: "testing"
}

这是我试过的代码,

client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client, name="test")
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLvel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.info(json.dumps({"test": "testing"})

为了改变 jsonPayload 的格式,我想我可能需要设置一个格式化程序,我尝试了一些来自网络的示例,但没有成功。

如何使 jsonPayload 准确显示我的 JSON 格式数据?

云函数也有类似的问题。我正在使用 python3.7,使用了多个客户端日志记录库,并且 stackdriver 仍将其显示为文本,因为 python 正在以字符串格式打印它。

最终将 python 升级到 v3.8,这解决了问题。

在 Cloud Logging 中,结构化日志我们可以参考使用 jsonPayload 字段为其负载添加结构的日志条目。

我们有多种方法可以将您的有效负载转换为 JSON 格式:

  1. 当您使用 Cloud Logging agent 获取日志条目时,您可以指定 Logging 代理将您的负载转换为 JSON 格式。

我们应该安装日志代理,要启用结构化日志,您必须在安装或重新安装时更改日志代理的默认配置 它。启用结构化日志记录会替换之前列出的配置文件。代理本身的操作没有变化。

  1. 您可以使用 Cloud Logging API 或 gcloud 命令行工具,您可以控制负载的结构。有关示例,请参阅 Writing structured logs

您可以通过以下方式将结构化日志写入Logging:

  • 将带有 jsonPayload 的完整 LogEntry 结构发送到云端 记录 API
  • 向 Logging 代理提供序列化的 JSON 对象

当您启用结构化日志记录时,列出的日志将转换为与启用结构化日志之前格式不同的日志条目。

请查看Structured logging了解更多详情。

  1. 您可以使用 BindPlane 服务来获取日志,然后您的有效负载采用 JSON 格式并根据源系统进行结构化。

您也可以查看 Formatting Python Logs for Stackdriver