blob: 2e0774ee2ac877489355c85a295debd63a6911e0 [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
### listen for logs from the on-device log_listener
## usage: fx log [-h | --help] [--raw] [-r | --remote-symbols] LOG_LISTENER_FLAGS
##
## --experimental use the experimental C++ symbolizer
##
## --legacy use the legacy Go symbolizer
##
## --raw do not attempt to symbolize the log
##
## --remote-symbols|-r attemp to resolve symbols using predefined remote
## symbol servers for symbols that cannot be resolved
## locally. See `fx help symbolize` for more
## information on remote symbol servers.
##
## --help|-h show this help and attempt to also show the
## on-device log_listener help
##
## LOG_LISTENER_FLAGS bypass flags for the on-device log_listener, options are listed at
## https://fuchsia.dev/fuchsia-src/reference/diagnostics/logs/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 $?
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 is_remote=0
declare symbolizer=( "fx-command-run" "symbolize" )
while [[ $# -ne 0 ]]; do
case "$1" in
-h|--help)
fx-command-help
echo
echo "*** Help for on-device log_listener:"
fx-command-exec shell log_listener -h
exit 0
;;
--raw)
is_raw=1
;;
--remote-symbols|-r)
is_remote=1
symbolizer+=("-r")
;;
--experimental|--legacy)
symbolizer+=("$1")
;;
*)
break
esac
shift
done
if (( is_raw )) && (( is_remote )); then
fx-error "Invalid syntax: --raw and -r cannot be used together"
fx-command-help
exit 1
fi
if (( is_raw )); then
listen "$@"
else
listen "$@" | "${symbolizer[@]}"
fi