#!/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) echo -e "\033[0;32m${line}\033[0m" ;; WARN) echo -e "\033[0;33m${line}\033[0m" ;; ERROR) echo -e "\033[0;31m${line}\033[0m" ;; DEBUG) [ "$LOG_LEVEL" = "DEBUG" ] && echo -e "\033[0;36m${line}\033[0m" || return 0 ;; esac echo "$line" >> "$LOG_FILE" } log_info() { _log INFO "$@"; } log_warn() { _log WARN "$@"; } log_error() { _log ERROR "$@"; } log_debug() { _log DEBUG "$@"; }