日志主要在以下两种情境中使用:使用实时 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>
为 TRACE
、DEBUG
、INFO
、WARN
、ERROR
、FATAL
之一。
例如,如果您运行以下命令:
ffx log --set-severity netstack#DEBUG
core/network/netstack
组件开始发出 DEBUG
日志,ffx log
输出会输出包含 netstack
的 DEBUG
日志的日志流。当命令停止(例如通过 Ctrl-C)时,该组件会恢复使用默认的最低严重级别(通常为 INFO
)发出日志。
此功能也适用于测试。如需了解详情,请参阅设置最低日志严重级别。
fx test
在底层,fx test
会调用 run-test-suite
,后者会从测试组件收集隔离的 stdout
、stderr
和 LogSink
连接,并将输出内嵌打印,以防止它们显示在全局日志缓冲区中。
对于尚未成为组件的测试,系统不会拦截日志。
如需详细了解密封测试,请参阅密封集成测试。
内核日志
klog
或debuglog会通过内核控制台和串行控制台输出。
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 的 stdout
和 stderr
。
对于单个测试可执行文件,botanist 会使用 testrunner 库并单独收集该输出。测试失败后,您会看到以下输出,其中包含名为 stdio
的链接。testrunner
调用的大多数测试都会通过 SSH 连接到目标设备来运行 run-test-suite
。这会从测试环境收集 stdout
、stderr
和日志,并将其内嵌输出。
syslog.txt
syslog.txt
文件包含在目标设备上运行 ffx log
的 Botanist 的输出。
infra_and_test_std_and_klog.txt
infra_and_test_std_and_klog.txt
日志包含 Swarming 任务运行的命令的 stdout
和 stderr
。
通常,这包括以下内容:
此汇总日志会先通过等效于 ffx debug symbolize
的代码运行,然后再上传并显示在 Web 界面中。
serial_log.txt
serial_log.txt
日志包含来自目标设备的序列日志。
triage_output.txt
triage_output.txt
日志包含对从目标设备收集的快照运行分类工具的结果。
summary.json
summary.json
日志包含测试执行的结构化输出摘要。
$debug 详细信息
$debug
详情包括在执行基础架构的食谱步骤期间发出的调试日志。
$execution 详细信息
食谱步骤的 $execution
详细信息,包括运行的命令和有关执行环境的详细信息。此日志通常有助于在本地重现食谱步骤。