ffx log
命令可监控和过滤来自 Fuchsia 设备的日志消息。
概念
ffx
守护程序在宿主机上在后台运行,会主动发现 Fuchsia 设备,并在连接到这些设备时自动连接到这些设备。启用主动式日志记录功能(ffx
的默认设置)后,ffx
守护程序会开始从目标设备读取设备日志,并将日志缓存在宿主机上,直至达到配置的空间上限。
当主机上的存储日志达到空间限制时,系统会轮替日志,也就是说,系统会删除最早的日志,为最新的日志腾出空间。此外,从设备读取日志时,在将日志写入主机的缓存之前,系统会在后台对日志进行符号化。
默认情况下,ffx log
命令会输出所有设备日志,并使连接保持开启状态,以便持续从目标设备流式传输新日志。
监控设备日志
如需实时监控设备日志,请运行以下命令:
ffx log
此命令会输出类似于以下内容的输出:
$ ffx log
[2022-03-29 18:43:40.973][<ffx>]: logger started.
[0.000][klog][klog][I] printing enabled
[0.000][klog][klog][I] INIT: cpu 0, calling hook 0xffffffff00177fc0 (elf_build_id) at level 0x1, flags 0x1
[0.000][klog][klog][I] ACPI LITE: Found valid RSDT table at physical address 0x7ffe21cc
[0.000][klog][klog][I] PMM: boot reserve add [0x100000, 0x488fff]
[0.000][klog][klog][I] PMM: boot reserve add [0x3502000, 0x46d7fff]
[0.000][klog][klog][I] PMM: adding arena 0xffffffff00485128 name 'memory' base 0x100000 size 0x7fede000
[0.000][klog][klog][I] PMM: adding arena 0xffffffff00485128 name 'memory' base 0x100000000 size 0x180000000
[0.000][klog][klog][I] PMM: boot reserve marking WIRED [0x100000, 0x488fff]
[0.000][klog][klog][I] PMM: boot reserve marking WIRED [0x3502000, 0x46d7fff]
[0.000][klog][klog][I] UART: kernel serial enabled: port=0x3f8, irq=0x4
[0.000][klog][klog][I] UART: enabled with FIFO depth 64
[0.000][klog][klog][I] INIT: cpu 0, calling hook 0xffffffff00342380 (intel_rng_init) at level 0x20001, flags 0x1
[0.000][klog][klog][I] INIT: cpu 0, calling hook 0xffffffff0015dee0 (global_prng_seed) at level 0x20002, flags 0x1
[0.000][klog][klog][I]
[0.000][klog][klog][I] welcome to Zircon
[0.000][klog][klog][I]
[0.000][klog][klog][I] KASLR: .text section at 0xffffffff00100000
[0.000][klog][klog][I] initializing arch pre-vm
...
按 CTRL+C
键退出。
过滤设备日志
如需实时过滤设备日志,请运行以下命令:
ffx log --filter <STRING>
将 STRING
替换为您要用于过滤日志的字符串。如果路径中包含空格,请使用引号 (""
)。
以下示例会监控设备日志,并且仅输出包含字符串 Hello, World!
的消息:
$ ffx log --filter "Hello, World!"
[252.071][core/ffx-laboratory:hello_world][][I] Hello, World!
按 CTRL+C
键退出。
此功能的常见用例是选择一个组件(例如下面的 hello_world
),并仅监控来自该组件的日志:
$ ffx log --filter hello_world
[177262.742][core/pkg-resolver][pkg-resolver][I] Fetching blobs for fuchsia-pkg://fuchsiasamples.com/hello_world: []
[177262.762][core/pkg-resolver][pkg-resolver][I] resolved fuchsia-pkg://fuchsiasamples.com/hello_world as fuchsia-pkg://fuchsiasamples.com/hello_world to ff6a0f00bde933c0fb393405ccf2d4c17e6eabeb9bfc82c9bf91db35693933ca with TUF
[177262.788][core/pkg-resolver][pkg-resolver][I] Fetching blobs for fuchsia-pkg://fuchsiasamples.com/hello_world: []
[177262.789][core/pkg-resolver][pkg-resolver][I] resolved fuchsia-pkg://fuchsiasamples.com/hello_world as fuchsia-pkg://fuchsiasamples.com/hello_world to ff6a0f00bde933c0fb393405ccf2d4c17e6eabeb9bfc82c9bf91db35693933ca with TUF
[177262.816][core/ffx-laboratory:hello_world][][I] Hello, World!
使用日志级别过滤设备日志
如需根据日志级别实时过滤设备日志,请运行以下命令:
ffx log --severity <LOG_LEVEL>
将 LOG_LEVEL
替换为您要用于过滤日志的日志级别。支持的日志级别包括 error
、warn
、info
、debug
和 trace
。
以下示例会监控设备日志,并且仅输出日志级别为 WARN
的消息:
$ ffx log --severity warn
...
[166547.984][core/network/netstack][netstack,DHCP][W] client.go(692): ethp0004: recv timeout waiting for dhcpOFFER; retransmitting dhcpDISCOVER
[166564.788][core/network/netstack][netstack,DHCP][W] client.go(692): ethp0004: recv timeout waiting for dhcpOFFER; retransmitting dhcpDISCOVER
[166567.571][core/wlancfg][wlancfg_lib::client::scan,wlan][W] Failed to get an SME proxy for scan: no client ifaces available
[166567.571][core/session-manager/session:session/workstation_session/login_shell/ermine_shell][ermine][W] Error encountered during scan: MethodException: ScanErrorCode(1)
[166568.746][core/detect][detect][W] Snapshot trigger was missing: ValueError: Division by zero
[166568.749][core/detect][detect][W] Snapshot trigger was missing: ValueError: Division by zero
按 CTRL+C
键退出。
转储设备日志
ffx log dump
命令会输出会话中的所有设备日志并立即退出。
如需转储所有设备日志,请运行以下命令:
ffx log dump
此命令会输出类似于 ffx log
的输出,但会在输出日志后退出。
转储上一个会话中的设备日志
ffx log dump
命令可以输出目标设备的上一个会话中的设备日志。
如需从所选会话转储设备日志,请运行以下命令:
ffx log dump <SESSION_NUMBER>
将 SESSION_NUMBER
替换为以 ~
为前缀的数字,例如 ~1
、~2
、~3,
等。
以下示例会输出上一个会话中的第二个设备日志:
$ ffx log dump ~2
每次设备启动时,系统都会启动一个会话。对于会话编号,请考虑为设备上的当前活跃会话预留 0
。其中,~1
是最近的前一会话(即上次重新启动前的会话),~2
是次最近的前一会话。
转储一段时间前的设备日志
如需从过去的某个特定时间开始转储设备日志,请运行以下命令:
ffx log --since <TIME> dump
将 TIME
替换为您要查看日志的起始时间点(以人类可读的格式表示,例如 "30m ago"
或 "2h ago"
)。
以下示例会输出过去 5 分钟内到最新消息的设备日志:
$ ffx log --since "5m ago" dump