124 lines
3.1 KiB
Bash
124 lines
3.1 KiB
Bash
|
#!/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;
|
||
|
}
|