blob: 10a4048441fb06590d485fdcc3aced07faed3688 [file] [log] [blame] [view]
# View device logs
The [`ffx log`][ffx-log] commands can monitor and filter log messages from a Fuchsia device.
## Concepts
The `ffx` daemon, which runs in the background on the host machine, proactively discovers
Fuchsia devices and automatically connects to them as they become reachable. With the
[proactive logging][proactive-logging] feature enabled (which is the default setting for
`ffx`), the `ffx` daemon starts reading device logs from the target device and
caches the logs on the host machine, up to a configured space limit.
When the space limit for the stored logs is reached on the host machine, the logs get
rotated, meaning the oldest logs are deleted to make room for the latest ones. Additionally,
logs are [symbolized][symbolize-logs] in the background as they are read from the device,
before they are written to the cache on the host machine.
By default, the `ffx log` command prints all device logs and leaves the connection open
to continuously stream new logs from the target device.
## Monitor device logs {:#monitor-device-logs}
To monitor device logs in real time, run the following command:
```posix-terminal
ffx log
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ 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
...
```
Press `CTRL+C` to exit.
## Filter device logs {:#filter-device-logs}
To filter device logs in real time, run the following command:
Note: The `--filter` flag also works with the [`dump`](#dump-device-logs) option.
```posix-terminal
ffx log --filter <STRING>
```
Replace `STRING` with a string you want to use to filter the logs. Use quotation marks
(`""`) if it contains spaces.
The example below monitors device logs and only prints messages that contain
the string `Hello, World!`:
```none {:.devsite-disable-click-to-copy}
$ ffx log --filter "Hello, World!"
[252.071][core/ffx-laboratory:hello_world][][I] Hello, World!
```
Press `CTRL+C` to exit.
A common use case for this feature is to select a component (for example,
`hello_world` below) and monitor logs only from that component:
```none {:.devsite-disable-click-to-copy}
$ 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!
```
## Filter device logs using log levels {:#filter-device-logs-using-log-levels}
To filter device logs based on their log level in real time, run the following command:
Note: The `--severity` flag also works with the [`dump`](#dump-device-logs) option.
```posix-terminal
ffx log --severity <LOG_LEVEL>
```
Replace `LOG_LEVEL` with a log level you want to use to filter the logs. Supported log levels are
`error`, `warn`, `info`, `debug`, and `trace`.
The example below monitors device logs and only prints messages with the log level `WARN`:
```none {:.devsite-disable-click-to-copy}
$ 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
```
Press `CTRL+C` to exit.
## Dump device logs {:#dump-device-logs}
The `ffx log dump` command prints all device logs in a session and exits immediately.
To dump all device logs, run the following command:
```posix-terminal
ffx log dump
```
This command prints output similar to `ffx log`, but exits after printing the logs.
## Dump device logs from a previous session {:#dump-device-logs-from-a-previous-session}
The `ffx log dump` command can print device logs from the target devices previous session.
To dump device logs from a selected session, run the following command:
```posix-terminal
ffx log dump <SESSION_NUMBER>
```
Replace `SESSION_NUMBER` with a number with `~` as a prefix, for example, `~1`, `~2`, `~3,`
and so on.
The example below prints the device logs from the second previous session:
```none {:.devsite-disable-click-to-copy}
$ ffx log dump ~2
```
A session starts on each booting of a device. For session numbers, consider `0` is
reserved for the current, active session on the device. From there, `~1` is the most
recent previous session (that is, the session before the last reboot), and `~2` is the
second most recent previous session.
## Dump device logs from some time ago {:#dump-device-logs-from-some-time-ago}
To dump device logs starting from some specific time in the past, run the following command:
Note: The `--since` flag also works without the `dump` option.
```posix-terminal
ffx log --since <TIME> dump
```
Replace `TIME` with a point of time in human readable format (for example, `"30m ago"`
or `"2h ago"`) which you want to see the logs from.
The example below prints the device logs from 5 minutes ago to the latest message:
```none {:.devsite-disable-click-to-copy}
$ ffx log --since "5m ago" dump
```
<!-- Reference links -->
[ffx-log]: https://fuchsia.dev/reference/tools/sdk/ffx#log_2
[proactive-logging]: /docs/development/tools/ffx/commands/log.md#proactive_logging
[symbolize-logs]: ./symbolize-logs.md