查看日志

日志主要在以下两种情境中使用:使用实时 Fuchsia 目标设备的互动式在线情境,或使用从设备的过往执行收集的日志的离线情境。

所有日志都附带时间戳,即从启动设备和记录日志消息起的时间。读取器收到消息的顺序可能与时间戳所示的顺序不同。

有两个缓冲区(易失性缓冲区和永久性缓冲区)用于存储日志。如需详细了解日志在设备上的存储位置,请参阅存储

在线

您可以通过 ffx log 交互式查看 Fuchsia 的日志。

ffx log

如需查看具体日志,您可以使用 --filter--tag--moniker 等选项。例如,您可以使用 --filter 查看标记为 network 的所有日志:

ffx log --filter network

如果您要处理启动等工作,或者无法访问设备的网络,则可以通过串行控制台连接到 Fuchsia 设备。在这些情况下,您可以使用 log_listener

log_listener

在开发过程中,您可以使用 ffx log 查看所有日志,包括从 klog 转发的日志。

如果您只能访问串行控制台、没有网络连接,或者您只是在处理 bringup build,则在串行控制台中运行 log_listener 会很有用。此命令使用与 ffx log 相同的 CLI。如果您使用的是 log_listener,则可以将使用 ffx log 的任何示例替换为 log_listener

ffx log 通过 fuchsia.diagnostics.ArchiveAccessor 协议接收日志。

格式

日志以以下格式输出:

[seconds since boot][pid][tid][tags] SEVERITY: message

时间戳相对于启动后的时长,其格式为微秒级粒度。

如果消息 Something happened 由进程 1902、线程 1904 和时间 278.14 中的 my-component 组件以 WARN 严重级别写入,则输出如下所示:

[278.14][1902][1904][my-component] WARN: Something happened

ffx log 命令有多个选项(例如 --show-metadata--show-full-moniker),用于显示有关日志的更多元数据。如果您有运行中的 Fuchsia 设备,可以运行 ffx log --help 来查看用于修改输出格式的选项。

如需了解详情,请参阅 ffx log

动态设置最低日志严重级别

默认情况下,通过 Fuchsia 的日志记录库与 fuchsia.logger.LogSink 集成的组件支持在运行时配置其最低日志严重级。

为此,您可以将 --set-severity 传递给 ffx log--set-severity 选项接受格式为 <component_query>#<SEVERITY> 的字符串参数,其中 <component_query> 是一个字符串,用于模糊匹配组件标识名或网址,<severity>TRACEDEBUGINFOWARNERRORFATAL 之一。

例如,如果您运行以下命令:

ffx log --set-severity netstack#DEBUG

core/network/netstack 组件开始发出 DEBUG 日志,ffx log 输出会输出包含 netstackDEBUG 日志的日志流。当命令停止(例如通过 Ctrl-C)时,该组件会恢复使用默认的最低严重级别(通常为 INFO)发出日志。

此功能也适用于测试。如需了解详情,请参阅设置最低日志严重级别

fx test

在底层,fx test 会调用 run-test-suite,后者会从测试组件收集隔离的 stdoutstderrLogSink 连接,并将输出内嵌打印,以防止它们显示在全局日志缓冲区中。

对于尚未成为组件的测试,系统不会拦截日志。

如需详细了解密封测试,请参阅密封集成测试

内核日志

klogdebuglog通过内核控制台和串行控制台输出。

netsvc 会通过 UDP 转发 klog,这是您运行 fx klog 时输出的结果。如果您无法运行 ffx log 或无法与 Fuchsia 设备建立 SSH 连接,则可以在后台终端中运行 fx klog 来捕获内核日志。

或者,您也可以从设备 shell 使用 dlog 转储内核调试日志。

格式

串行日志中的内核日志采用以下格式输出:

[timestamp] pid:tid> message

时间戳基于设备启动以来所经过的时间。其格式为:秒数采用 5 位数(前导零),毫秒数采用 3 位数(后置零)。

进程和线程 KOID 各由 5 位数字组成(包含前导零)。

如果消息 Something happened 是从进程 1902、线程 1904 和时间 278.14 写入的,则输出如下所示:

[00278.140] 01902:01904> Something happened

您可以使用 fx pretty_serial 命令减少 klog 输出的元数据,并按严重程度对日志行进行颜色编码。使用 fx pretty_serial 时,系统会隐藏一些元数据(例如 PID、TID、文件名),同时会缩减其他元数据(例如时间戳和严重程度)。

应从模拟器或其他来源管道传入串行输出。

例如,如需从模拟器查看内核日志的美化输出,请执行以下操作:

ffx emu start --console | ffx debug symbolize

例如,如果 my-component 组件在 278.14 时刻以 WARN 严重级别将消息 Something happened 输出到 klog,则美化输出如下所示:

[278.14][my-component][W] Something happened

例如,如果消息 Something happened 在时间 278.14 由未知组件以未知严重性输出到 klog,则美化输出如下所示:

[278.14] Something happened

将 syslog 发送到串行端口

syslog 中的某些日志会输出到串行控制台。默认情况下,这包括 bootstrap 领域下的所有组件,例如:驱动程序和 driver_manager。您可以通过诊断程序集配置添加其他组件。

线下:CQ/CI/LUCI

运行测试时,Swarming 聊天机器人会调用 botanist,后者会收集多个输出流以在网页界面中显示。在 Web 界面中,“Swarming 任务界面”会显示 botanist 的 stdoutstderr

对于单个测试可执行文件,botanist 会使用 testrunner 库并单独收集该输出。测试失败后,您会看到以下输出,其中包含名为 stdio 的链接。testrunner 调用的大多数测试都会通过 SSH 连接到目标设备来运行 run-test-suite。这会从测试环境收集 stdoutstderr 和日志,并将其内嵌输出。

syslog.txt

syslog.txt 文件包含在目标设备上运行 ffx log 的 Botanist 的输出。

infra_and_test_std_and_klog.txt

infra_and_test_std_and_klog.txt 日志包含 Swarming 任务运行的命令的 stdoutstderr

通常,这包括以下内容:

  • Botanist 的日志消息。
  • netsvc 中的内核日志。这等同于 fx klog
  • testrunner 运行的测试的 stdoutstderr 和测试日志。

此汇总日志会先通过等效于 ffx debug symbolize 的代码运行,然后再上传并显示在 Web 界面中。

serial_log.txt

serial_log.txt 日志包含来自目标设备的序列日志。

triage_output.txt

triage_output.txt 日志包含对从目标设备收集的快照运行分类工具的结果。

summary.json

summary.json 日志包含测试执行的结构化输出摘要。

$debug 详细信息

$debug 详情包括在执行基础架构的食谱步骤期间发出的调试日志。

$execution 详细信息

食谱步骤的 $execution 详细信息,包括运行的命令和有关执行环境的详细信息。此日志通常有助于在本地重现食谱步骤。