#!/usr/bin/env bash LOG_LEVEL=${LOG_LEVEL:=6} # 7 = debug -> 0 = emergency NO_COLOR="${NO_COLOR:-}" # shellcheck disable=SC2034 TRACE="0" # _log # ----------------------------------- # Handles all logging, all log messages are output to stderr so stdout can still be piped # Example: _log "info" "Some message" # ----------------------------------- # shellcheck disable=SC2034 _log () { local log_level="${1}" # first option is the level, the rest is the message shift local color_success="\\x1b[32m" local color_debug="\\x1b[36m" local color_info="\\x1b[90m" local color_notice="\\x1b[34m" local color_warning="\\x1b[33m" local color_error="\\x1b[31m" local color_critical="\\x1b[1;31m" local color_alert="\\x1b[1;33;41m" local color_emergency="\\x1b[1;4;5;33;41m" local colorvar="color_${log_level}" local color="${!colorvar:-${color_error}}" local color_reset="\\x1b[0m" # If no color is set or a non-recognized terminal is used don't use colors if [[ "${NO_COLOR:-}" = "true" ]] || { [[ "${TERM:-}" != "xterm"* ]] && [[ "${TERM:-}" != "screen"* ]]; } || [[ ! -t 2 ]]; then if [[ "${NO_COLOR:-}" != "false" ]]; then color=""; color_reset=""; fi fi # all remaining arguments are to be printed local log_line="" while IFS=$'\n' read -r log_line; do echo -e "$(date +"%Y-%m-%d %H:%M:%S %Z") ${color}[${log_level}]${color_reset} ${log_line}" 1>&2 done <<< "${@:-}" } # emergency # ----------------------------------- # Handles emergency logging # ----------------------------------- emergency() { _log emergency "${@}"; exit 1; } # success # ----------------------------------- # Handles success logging # ----------------------------------- success() { _log success "${@}"; true; } # alert # ----------------------------------- # Handles alert logging # ----------------------------------- alert() { [[ "${LOG_LEVEL:-0}" -ge 1 ]] && _log alert "${@}"; true; } # critical # ----------------------------------- # Handles critical logging # ----------------------------------- critical() { [[ "${LOG_LEVEL:-0}" -ge 2 ]] && _log critical "${@}"; true; } # error # ----------------------------------- # Handles error logging # ----------------------------------- error() { [[ "${LOG_LEVEL:-0}" -ge 3 ]] && _log error "${@}"; true; } # warning # ----------------------------------- # Handles warning logging # ----------------------------------- warning() { [[ "${LOG_LEVEL:-0}" -ge 4 ]] && _log warning "${@}"; true; } # notice # ----------------------------------- # Handles notice logging # ----------------------------------- notice() { [[ "${LOG_LEVEL:-0}" -ge 5 ]] && _log notice "${@}"; true; } # info # ----------------------------------- # Handles info logging # ----------------------------------- info() { [[ "${LOG_LEVEL:-0}" -ge 6 ]] && _log info "${@}"; true; } # debug # ----------------------------------- # Handles debug logging and prepends the name of the that called debug in front of the message # ----------------------------------- debug() { [[ "${LOG_LEVEL:-0}" -ge 7 ]] && _log debug "${FUNCNAME[1]}() ${*}"; true; }