使用日志点

在 Cloud Debugger 中 设置调试 并部署或启动应用之后,可以在 源代码控制台 中添加日志点。

日志点概述

日志点可让您将日志记录注入正在运行的服务,而无需重启服务或干扰服务的正常功能。每当任何实例在日志点位置运行代码时,Debugger 都会记录一条消息。日志输出将发送到目标环境的适当日志。例如,对于 App Engine,会将输出发送至 Cloud Logging 中的请求日志。

日志点在创建后的 24 小时内保持活动状态,或者直到它们被删除或重新部署服务。

添加调试日志点

  1. 在 Google Cloud Console 中,打开 Cloud Source Repositories。

    打开 Cloud Source Repositories

    所有代码库 页面打开。或者,您可以打开 我的源代码 视图。

  2. 点击代码库的名称。

  3. 转到包含您要观看的源代码的文件。

  4. 点击源代码位置的行号。

    选择日志点位置

  5. 出现提示时,选择要在其中添加日志点的应用。

    选择日志点应用

  6. 点击 创建日志点

    创建日志点

  7. 出现提示时,输入日志点条件和消息。

    创建日志点

  8. 点击添加

    添加日志点后,表达式将在源代码控制台的文件视图中内嵌显示。要编辑日志点,请将指针悬停在该日志点上,然后点击 编辑

日志点条件

日志点条件是一个简单表达式,必须等于 true 才能记录日志点。每次实例运行代码行时都会评估日志点条件,直到日志点过期或被删除。

快照条件是一个完整的布尔表达式,可以包含逻辑运算符:

travelAccessory == "Towel"
ultimateAnswer <= 42
travelAccessory == "Towel" && ultimateAnswer <= 42

日志点消息

日志点消息确定输出中记录的内容。表达式使您可以评估和记录感兴趣的值。大括号中消息(例如 {myObj.myFunc()}{a + b})的任何内容都被替换为输出中该表达式的值。上述示例中的消息 User {name} scored {newScore.score} 记录与 User user1 scored 99 类似的输出。

您可以将以下语言功能用于表达式。

Java

支持大多数 Java 表达式,包括:
  • 本地变量:a == 8
  • 数值和布尔运算:x + y < 20
  • 实例和静态字段:this.counter == 20this.myObj.isShutdownmyStaticcom.mycompany.MyClass.staticMember
  • 字符串与等式运算符的比较:myString == "abc"
  • 函数调用。您只能使用只读函数。例如,支持 StringBuilder.indexOf(),但不支持 StringBuilder.append()
  • 类型转换,具有完全限定类型:((com.myprod.ClassImpl) myInterface).internalField

支持以下语言功能:

  • 取消装箱数值类型,例如 Integer;改用 myInteger.value

Python

支持大多数 Python 表达式,包括:
  • 读取局部变量和全局变量。
  • 从数组、列表、切片、字典和对象中读取。
  • 调用简单的方法。

不支持以下语言功能:

  • 调用分配新对象或使用复杂构造的函数。
  • 在表达式中创建新对象。

Go(测试版)

支持大多数 Go 表达式语法,包括:
  • 读取局部变量和全局变量。
  • 从数组、切片、映射和结构体中读取。

不支持以下语言功能:

  • 从接口值读取。
  • 类型转换和复合文字。
  • len 之外的函数调用。

查看输出

日志点输出将被发送至目标环境的相应日志。

App Engine

在 App Engine 应用上设置的日志点会将其输出发送至日志记录中的 请求日志

您可以在日志面板或专用的日志浏览器中查看日志。

Compute Engine

在 Compute Engine 应用上设置的日志点会将其输出发送至与常规日志语句相同的位置。例如,在 Python 中,默认的日志记录模块将其输出发送至 stdout,但也可以将其配置为写入特定文件。

您可以设置 Logging 代理 以将这些日志转发至日志记录。之后,您可以在日志浏览器中查看日志。

删除日志点

24 小时后,日志点会变为非活动状态并停止记录消息,并在 30 天后自动删除。您可以手动删除日志点,这样既可以停止日志记录,又可以从历史记录中删除日志记录,以供将来参考。但是,删除日志点不会删除已经生成的日志消息。

要删除日志点,请执行以下过程:

在 GCP Console 底部窗格的 Logpoints 标签中,将指针悬停在日志点上,然后点击 删除

删除日志点

后续步骤