blob: d2b32651f88684b36e448b9a49af28b461639e45 [file] [log] [blame]
#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#### CATEGORY=Run, inspect and debug
### Display logs from a target device.
## usage: fx log FFX_LOG_FLAGS
##
## FFX_LOG_FLAGS flags to pass to ffx log, see `fx ffx log --help`.
##
## LEGACY MODE: listen for logs from the on-device log_listener
##
## usage: fx log --legacy [-h | --help] [--raw] LOG_LISTENER_FLAGS
##
## --legacy runs in legacy mode, i.e. listen for logs from
## the on-device log_listener
##
## --raw do not attempt to symbolize the log
##
## --help|-h show this help and attempt to also show the
## on-device log_listener help
##
## LOG_LISTENER_FLAGS flags (e.g., severity) to pass to the on-device
## log_listener; supported flags are listed at
## https://fuchsia.dev/fuchsia-src/reference/diagnostics/consumers/log_listener.
##
## Creates an SSH connection with a device and starts listening for logs.
## It will listen to the device specified with `fx -d DEVICE log` or
## `fx set-device`, otherwise it will try to find a connected device.
##
## If the command hangs without printing anything, first check to make sure `fx shell`
## works on its own.
##
## For more information on flags supported by the on-device log_listener, see
## https://fuchsia.dev/fuchsia-src/reference/diagnostics/consumers/log_listener.
set -o pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
if [[ "$1" == '--legacy' ]]; then
shift
fx-warn 'DEPRECATION WARNING'
fx-warn 'You are using `fx log` in legacy mode, this mode will be removed soon.'
fx-warn 'If you have any concerns, please report to https://fxbug.dev/131196.\n'
function listen {
while true; do
fx-command-run wait || return
fx-command-run shell log_listener "$@"
local error_code=$?
if [[ "${error_code}" -eq 0 ]]; then
# this is necessary, so that "--dump_logs yes" works as expected.
break
fi
echo "$(date '+%Y-%m-%d %H:%M:%S %Z'): Connection lost (status ${error_code}), reconnecting..."
done
}
declare is_raw=0
declare symbolizer=( "fx-command-run" "ffx" "debug" "symbolize" )
while [[ $# -ne 0 ]]; do
case "$1" in
-h|--help)
fx-command-help
echo
echo "[Attempting to shell into a connected device to provide help for the on-device log_listener]"
fx-command-exec shell log_listener -h
exit 0
;;
--raw)
is_raw=1
;;
--remote-symbols|-r)
fx-error "--remote-symbols|-r is deprecated. Remote symbolization will be tried automatically."
exit 1
;;
--no-prettify)
symbolizer+=("--no-prettify")
;;
*)
break
esac
shift
done
if (( is_raw )); then
listen "$@"
else
listen "$@" | "${symbolizer[@]}"
fi
else
fx-command-run ffx log "$@"
fi