Minecraft-Console-Client/tools/mcc-log-tail.sh

60 lines
2 KiB
Bash

#!/usr/bin/env bash
# Tail MCC and/or server logs side-by-side or individually.
# Usage:
# tools/mcc-log-tail.sh # tail MCC log only
# tools/mcc-log-tail.sh --session NAME # tail MCC log for a specific session
# tools/mcc-log-tail.sh --server VER # tail both MCC and server logs
# tools/mcc-log-tail.sh --server-only VER # tail server log only
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# shellcheck source=tools/mcc-env.sh
source "$REPO_ROOT/tools/mcc-env.sh"
SESSION=""
SERVER_VER=""
SERVER_ONLY=false
while [[ $# -gt 0 ]]; do
case "$1" in
--session) SESSION="$2"; shift 2 ;;
--server) SERVER_VER="$2"; shift 2 ;;
--server-only) SERVER_ONLY=true; SERVER_VER="$2"; shift 2 ;;
-h|--help)
echo "Usage: tools/mcc-log-tail.sh [--session NAME] [--server VER] [--server-only VER]"
exit 0 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
SESSION="$(_mcc_resolve_session "$SESSION")"
MCC_LOG="$(_mcc_session_log_file "$SESSION")"
if $SERVER_ONLY; then
if [[ -z "$SERVER_VER" ]]; then
echo "Specify server version with --server-only VER" >&2
exit 1
fi
SERVER_LOG="$MCC_SERVERS/$SERVER_VER/logs/latest.log"
echo "=== Tailing server log: $SERVER_LOG ==="
exec tail -f "$SERVER_LOG"
fi
if [[ -n "$SERVER_VER" ]]; then
SERVER_LOG="$MCC_SERVERS/$SERVER_VER/logs/latest.log"
echo "=== Tailing MCC + server logs ==="
echo " Session: $SESSION"
echo " MCC: $MCC_LOG"
echo " Server: $SERVER_LOG"
echo ""
tail -f "$MCC_LOG" "$SERVER_LOG" 2>/dev/null
else
if [[ ! -f "$MCC_LOG" ]]; then
echo "No MCC log found for session '$SESSION' at $MCC_LOG"
echo "Start MCC first with: tools/mcc-debug.sh --session $SESSION --file-input"
exit 1
fi
echo "=== Tailing MCC log for session '$SESSION': $MCC_LOG ==="
exec tail -f "$MCC_LOG"
fi