读取和写入 Cloud Run functions 函数日志
写入运行时日志
默认情况下,Cloud Run functions 包含简单的运行时日志记录功能。写入 stdout
或 stderr
的日志将自动显示在 Google Cloud 控制台中。如需了解更高级的日志记录功能,请使用 Cloud Logging 客户端库。
默认情况下,日志载荷是一个简单的文本字符串,如以下代码段所示。该字符串存储在日志条目的 textPayload
字段中。
Node.js
大多数日志条目没有关联的日志级别。其中包括:- 使用
console.log()
、console.info()
、console.warn()
或console.error()
发出的日志 - 直接写入
stdout
或stderr
的日志
内部系统消息的日志级别为 DEBUG
。
Python
- 标准输出或标准错误日志没有关联的日志级别。
- 内部系统消息的日志级别为
DEBUG
。
Go
- 写入
stdout
或stderr
的日志没有关联的日志级别。 - 内部系统消息的日志级别为
DEBUG
。
Java
- 写入
stdout
或stderr
的日志没有关联的日志级别。 - 内部系统消息的日志级别为
DEBUG
。
C#
- 写入
stdout
(例如,通过Console.WriteLine
)和stderr
(例如,通过Console.Error.WriteLine
)的文本没有日志级别。 - ASP.NET Core 日志记录级别会映射到 Cloud Logging 级别,如下所示:
LogLevel.Trace
和LogLevel.Debug map
映射到 Cloud LoggingDEBUG
。LogLevel.Information
映射到 Cloud LoggingINFO
。LogLevel.Warning
映射到 Cloud LoggingWARNING
。LogLevel.Error
映射到 Cloud LoggingERROR
。LogLevel.Critical
映射到 Cloud LoggingCRITICAL
。
Ruby
日志条目没有关联的日志级别。
PHP
写入结构化日志
上述默认文本日志没有关联的日志级别。如果您要在日志条目中包含日志级别或其他特定字段,您可以以单行序列化 JSON 的形式将日志写入 stdout
或 stderr
。此行由 Cloud Run functions 函数获取并解析,然后放入 jsonPayload
字段而不是 textPayload
。以下代码段演示了如何写入此类结构化日志。
Node.js
Python
Python 3.8 及更高版本提供结构化日志记录支持。
Go
每个日志条目的结构由 Entry
类型提供:
记录 Entry struct 时,调用 String
方法以将其编组为 Cloud Logging 预期的 JSON 格式:
Java
通过在 logback.xml
配置中启用 Logstash JSON 编码器,以使用 Logback 和 SLF4J 启用 JSON 日志记录。
处理消息中的特殊 JSON 字段
如果您以 JSON 字典形式提供结构化数据,则系统会从 jsonPayload
中删除某些特殊字段,并将这些字段写入所生成 LogEntry
中的相应字段(具体说明请参阅特殊字段文档)。
例如,如果您的 JSON 包含 severity
属性,则系统会将该属性从 jsonPayload
中移除,并将其显示为日志条目的 severity
。message
属性用作日志条目的主显示文本(如果存在)。
使用客户端库写入日志
Cloud Logging 客户端库提供了写入日志的其他方法。借助这些库,您可以使用编程语言的标准日志记录机制,并与各种支持的日志记录框架集成。客户端库还会自动捕获一些信息并提供接口来适当填充字段,从而简化特殊 JSON 字段的填充过程。
您可以通过客户端库以同步或异步方式使用 Cloud Logging API 写入日志。某些客户端库还支持直接将结构化日志写入 stdout
或 stderr
。请注意,如果您以异步方式写入日志,则意外的函数终止可能会导致日志条目丢失。另请注意,使用 Logging API 进行同步日志记录会增加函数执行时间,因为它需要等待 API 调用完成。
查看运行时日志
使用命令行工具
您可以在 Cloud Logging 界面中查看 Cloud Run functions 的日志,也可以通过 Google Cloud CLI 查看。
如需使用 gcloud CLI 查看日志,请使用 gcloud functions logs read
命令:
gcloud functions logs read --gen2
如需查看特定函数的日志,请以参数形式提供函数名称:
gcloud functions logs read FUNCTION_NAME --gen2
对于其他语言中的函数,可以使用 x-cloud-trace-context
请求标头来关联来自同一次函数执行的日志。
如需了解全部日志查看选项,请参阅 gcloud functions logs read
的文档。
使用 Logging 信息中心
您还可以在 Google Cloud 控制台中查看 Cloud Run functions 的运行时日志。
使用 Logging API
您还可以通过 Cloud Logging API 写入和检索运行时日志。Cloud Logging 客户端库提供了 Logging API 的惯用接口:
Node.js
如需了解详情,请参阅 Node.js 客户端库参考。Python
如需了解详情,请参阅 Python 客户端库参考。Go
如需了解详情,请参阅 Go 客户端库参考。Java
如需了解详情,请参阅 Java 客户端库参考。C#
Ruby
PHP
如需了解 Java 的额外日志记录选项,请参阅 Java 日志记录。
了解实例扩缩日志
为您的函数启动新实例时,Cloud Logging 会在 varlog/system
日志名称下添加日志条目,以反映创建每个实例的原因。日志条目遵循以下格式:
Starting new instance. Reason: REASON - DESCRIPTION
下表详细介绍了实例说明:
原因 | 说明 |
---|---|
CUSTOMER_MIN_INSTANCE |
客户为函数配置的实例数下限。 |
SCHEDULED |
由于配置的扩缩因子(例如 CPU 利用率、请求吞吐量等)及其目标而启动实例。 |
OVERFLOW |
由于未找到适合当前流量的现有容量,因此启动了实例。 |
响应运行时日志
如需响应 Cloud Logging 事件,您可以将其日志转发到 Cloud Run functions 函数。如需了解详情,请参阅使用 Cloud Logging 的第二方触发器页面。
查看构建映像日志
您还可以查看部署过程的构建映像步骤的日志。请点击链接了解详情。