Java 日志记录

在 Java 运行时中,输出到 STDOUTSTDERR 的任何内容都将传播到 Cloud Logging。但是,细化的日志严重级别并不会传播。您可以使用标准 Java Logging API (JUL) 记录消息并将正确的日志严重级别传播到 Cloud Logging。

如果您使用其他日志记录框架(例如 SLF4JLog4j 2Apache Commons Logging),则可通过以下方式之一来传播正确的日志严重级别:

  • 将日志消息的格式设置为结构化日志记录 JSON 格式,这样严重级别就会传播到 Cloud Logging。
  • 使用网桥/适配器将日志消息发送到 Java Logging API 时,就已经使用正确格式传播日志消息。如果您采用这种方法,请确保尚无现有的适配器已从 Java Logging API 路由到日志记录框架。

如果您的函数使用不同的库,并且这些库使用不同的日志记录框架,则您需要配置所使用的每个日志记录框架。以下部分介绍了各种方案中的一些方案。

Spring Cloud Run 函数

如果您将 Spring Cloud Functions 函数与 Spring Cloud Functions Google Cloud 适配器搭配使用,则可以使用 Spring Cloud 的 Google Cloud Logging StarterCONSOLE_JSON 附加器轻松输出 JSON 格式的日志。默认情况下,Spring 会使用 SLF4J 和 Logback,但您也可以将 SLF4J 日志路由到 Java Logging API。如需了解详情,请参阅 SLF4J 部分。

Java Logging API (JUL)

所有受支持的 Cloud Functions Java 环境都包括 Java Logging,并且提供一个 JSON 处理程序来输出正确格式的日志。某些 Java 框架可能会添加其他组件,以将 JUL 桥接到其他日志记录框架(例如 jul-to-slf4j 网桥Log4j JDK 日志记录适配器),在这种情况下,这些日志消息的格式将无法再正确设置。如果您的日志消息没有正确的严重级别,请确保移除这些网桥。

SLF4J

SLF4J 可以使用 slf4j-jdk14 日志记录框架绑定将日志写入 Java Logging API。如需了解详情,请参阅 SLF4J 文档。确保您没有 jul-to-slf4j 网桥。

Logback

Logback 未提供将日志消息路由到 Java Logging API 的附加器。但是,Logback 通常与 SLF4J API 搭配使用,因此您可以将 SLF4J 记录器实现切换为 Java Logging API

Log4j 2

Log4j 2 未提供将日志消息路由到 Java Logging API 的直接适配器。如果您使用的是 Log4j 2,则需要先使用 Log4J 2 转 SLF4J 适配器将消息路由到 SLF4J,然后将 SLF4J 配置为使用 Java Logging API 实现。确保您没有 Log4j JDK 日志记录适配器。

Apache Commons Logging (JCL)

Apache Commons Logging 具有 Java Logging API 适配器。将 Commons Logging 配置为使用 Jdk14Logger。如需了解详情,请参阅 Apache Commons Logging 配置页面。