130 lines
No EOL
3 KiB
Bash
Executable file
130 lines
No EOL
3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Load environment variables
|
|
if [ ! -f ../.env ]; then
|
|
echo "Error: .env file not found!"
|
|
exit 1
|
|
fi
|
|
|
|
source ../.env
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Function to show usage
|
|
show_usage() {
|
|
echo "Usage: $0 [options] [service]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -f, --follow Follow log output"
|
|
echo " -n, --lines N Show last N lines (default: 100)"
|
|
echo " -e, --errors Show only error messages"
|
|
echo " -w, --warnings Show error and warning messages"
|
|
echo " -s, --since TIME Show logs since timestamp (e.g. 42m for 42 minutes)"
|
|
echo " -u, --until TIME Show logs before timestamp"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
echo "Services:"
|
|
echo " wordpress Show WordPress logs"
|
|
echo " db Show MySQL logs"
|
|
echo " all Show all logs (default)"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Show last 100 lines of all logs"
|
|
echo " $0 -f wordpress # Follow WordPress logs"
|
|
echo " $0 -n 50 -e db # Show last 50 lines of MySQL errors"
|
|
echo " $0 -s 1h -w # Show warnings and errors from last hour"
|
|
}
|
|
|
|
# Default values
|
|
FOLLOW=false
|
|
LINES=100
|
|
ERRORS_ONLY=false
|
|
WARNINGS=false
|
|
SINCE=""
|
|
UNTIL=""
|
|
SERVICE="all"
|
|
|
|
# Parse command line options
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-f|--follow)
|
|
FOLLOW=true
|
|
shift
|
|
;;
|
|
-n|--lines)
|
|
LINES="$2"
|
|
shift 2
|
|
;;
|
|
-e|--errors)
|
|
ERRORS_ONLY=true
|
|
shift
|
|
;;
|
|
-w|--warnings)
|
|
WARNINGS=true
|
|
shift
|
|
;;
|
|
-s|--since)
|
|
SINCE="--since $2"
|
|
shift 2
|
|
;;
|
|
-u|--until)
|
|
UNTIL="--until $2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
wordpress|db|all)
|
|
SERVICE="$1"
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Error: Unknown option '$1'"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Build filter command
|
|
FILTER=""
|
|
if [ "$ERRORS_ONLY" = true ]; then
|
|
FILTER="grep -i 'error\\|exception\\|fatal'"
|
|
elif [ "$WARNINGS" = true ]; then
|
|
FILTER="grep -i 'error\\|exception\\|fatal\\|warning'"
|
|
fi
|
|
|
|
# Build docker-compose command
|
|
CMD="docker-compose logs"
|
|
[ "$FOLLOW" = true ] && CMD="$CMD -f"
|
|
[ -n "$LINES" ] && CMD="$CMD --tail=$LINES"
|
|
[ -n "$SINCE" ] && CMD="$CMD $SINCE"
|
|
[ -n "$UNTIL" ] && CMD="$CMD $UNTIL"
|
|
|
|
# Add service filter
|
|
case "$SERVICE" in
|
|
wordpress|db)
|
|
CMD="$CMD $SERVICE"
|
|
;;
|
|
all)
|
|
# Service remains unspecified to show all
|
|
;;
|
|
*)
|
|
echo "Error: Unknown service '$SERVICE'"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Execute command with optional filtering
|
|
if [ -n "$FILTER" ]; then
|
|
eval "$CMD | $FILTER"
|
|
else
|
|
eval "$CMD"
|
|
fi |