grafana-ansible-collection/tools/includes/logging.sh
2023-03-03 14:23:02 +05:30

124 lines
3.1 KiB
Bash
Executable File

#!/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;
}