命令日志

ffx log 是内置于 ffx 中的日志查看实用程序。本指南介绍了如何配置和使用 ffx log 在 Fuchsia 设备上查看日志。

如需启动日志查看器,请运行以下命令:

ffx log

此命令会输出当前日志内容,并让连接保持打开状态以串流传输新的日志条目。如需输出日志的当前内容并退出,请使用 dump

ffx log dump

主动日志记录

运行 ffx 命令后,ffx 守护程序会在后台持续运行。该守护程序会主动发现 Fuchsia 设备,并在设备可访问时连接到它们。

启用主动日志记录后,ffx 守护程序会开始在后台从目标设备读取日志 相应设备。日志会缓存在宿主机上,但不超过配置的空间限制。当达到空间限制时,系统会“轮替”日志:删除最早的日志,为最新的日志腾出空间。

这意味着,当您使用 ffx log 查看日志时,系统实际上是从主机上的缓存中读取日志,而不是直接从目标设备读取。通常,这不会给日志查看器增加任何明显的延迟,但在极少数情况下,设备会生成非常大的日志量。

功能

由于日志会缓存在主机上,因此您可以查看从目标设备缓存的日志,这些日志来自设备的之前启动。例如,如果设备发生崩溃,您或许可以查看崩溃前不久的日志(如果这些日志已及时缓存)。

您可以使用 ffx log dump 查看上一个会话的日志。例如,要查看您的 设备的上次启动时间:

ffx --target <NODENAME> log dump ~1

~1 标识相对于您要查看的最新会话的会话,其中 0 已预留给 该目标设备当前处于活动状态的会话(无论是否存在当前活动会话)。您 可以使用 ~2~3 等查看之前的启动过程。

配置

与预主动日志缓存相关的配置设置有 3 项:

  • proactive_log.max_sessions_per_target:要保留在磁盘上缓存的启动会话数量上限 主机。默认值为 5(即重新启动 6 次后,最早的启动会话的日志会被删除)。
  • proactive_log.max_session_size_bytes:每个会话要缓存的字节数上限。默认值为 100MB(即磁盘上存储 100MB 的日志后,最旧的日志块 会话将被删除)
  • proactive_log.max_log_size_bytes:要在单个日志分块中使用的字节数上限。 您通常不需要更改此设置。默认值为 1MB。

符号化

系统会在从设备读取日志(在将日志写入主机日志缓存之前)时,在后台对日志进行符号化处理。但是,这种后台处理意味着 symbolizer 主机工具或带有符号索引可能会导致日志在没有任何 警告。设置 symbolizer 工具时遇到的错误会记录到 ffx 守护程序日志。

使用 Fuchsia 源代码检出设置的用户无需执行任何额外配置;符号化会像 fx log 中一样自动进行。未设置 Fuchsia 源代码检出设置的用户需要配置适合其开发环境的符号索引。

ffx log 命令会尝试检测 symbolizer 工具中的常见错误配置,但无法检测所有错误配置。如果您的日志未符号化,请提交 bug

配置符号化程序

与符号化相关的配置参数有两个:

  • proactive_log.symbolize.enabled:切换是否尝试进行符号化处理。默认值为 true
  • proactive_log.symbolize.extra_args:额外参数的原始字符串,直接传递给 symbolizer 托管工具。例如,可用于配置远程符号服务器。默认值为 ""

过滤日志

ffx log 命令提供了其他选项,用于过滤从目标捕获的日志 设备。您可以根据时间戳、组件、标记或日志级别对日志应用过滤条件。

ffx log --filter hello-world --severity error

如需查看过滤选项的完整列表,请运行 ffx log --help

日志设置

日志过滤条件可修改 ffx log 所捕获日志的显示方式,但不会影响 目标设备上的组件发出的日志条目。您可以使用 --set-severity 选项发送请求,以便在日志记录会话期间配置特定组件的日志设置。这会调整应用于与所提供的组件选择器匹配的任何组件以记录日志的日志级别。

ffx log --set-severity component-selector#log-level

您可以利用此功能来暂时启用严重级别低于由您配置的最低严重级别的日志 组件(例如 DEBUGTRACE 日志),或者抑制来自组件的噪声日志以改善性能 性能

以下示例为 core/audio 组件启用调试日志,并会抑制网络组件中的错误消息以外的所有日志消息:

$ ffx log --set-severity core/audio#DEBUG --set-severity core/network/**#ERROR