#!/usr/bin/env bash # ============================================================================= # lib/logger.sh — Shared logging library # # Usage from any script: # source "$(dirname "$0")/lib/logger.sh" "operation-name" # # The first argument becomes the log file prefix. # Example: source lib/logger.sh "deploy" → logs/deploy-20260512-123456.log # # Override log level at runtime: # export LOG_LEVEL=DEBUG # ============================================================================= # Operation name passed by the calling script (default: "app") _LOG_PREFIX="${1:-app}" mkdir -p "$(dirname "$0")/logs" LOG_FILE="$(dirname "$0")/logs/${_LOG_PREFIX}-$(date +%Y%m%d-%H%M%S).log" LOG_LEVEL="${LOG_LEVEL:-INFO}" _log() { local level="$1"; shift local message="$*" local timestamp; timestamp="$(date '+%Y-%m-%d %H:%M:%S')" local line="[$timestamp] [$level] $message" case "$level" in INFO) printf "\033[0;32m%s\033[0m\n" "$line" ;; WARN) printf "\033[0;33m%s\033[0m\n" "$line" ;; ERROR) printf "\033[0;31m%s\033[0m\n" "$line" ;; DEBUG) [ "$LOG_LEVEL" = "DEBUG" ] && printf "\033[0;36m%s\033[0m\n" "$line" || return 0 ;; esac printf "%s\n" "$line" >> "$LOG_FILE" } log_info() { _log INFO "$@"; } log_warn() { _log WARN "$@"; } log_error() { _log ERROR "$@"; } log_debug() { _log DEBUG "$@"; }