rwx/sh/log/log.sh
2025-07-09 22:05:47 +02:00

81 lines
1.7 KiB
Bash

# ╭─────╮
# │ log │
# ╰─────╯
# ╭─────┬───────────╮
# │ log │ constants │
# ╰─────┴───────────╯
RWX_LOG_LEVEL_FATAL=0
RWX_LOG_LEVEL_ERROR=1
RWX_LOG_LEVEL_WARN=2
RWX_LOG_LEVEL_INFO=3
RWX_LOG_LEVEL_DEBUG=4
RWX_LOG_LEVEL_TRACE=5
# ╭─────┬───────────╮
# │ log │ variables │
# ╰─────┴───────────╯
rwx_log_level=${RWX_LOG_LEVEL_INFO}
# ╭─────┬───────────╮
# │ log │ functions │
# ╰─────┴───────────╯
_rwx_log() {
local prefix="${1}"
shift
[ ${#} -gt 0 ] || set -- ""
local line
for line in "${@}"; do
[ -n "${prefix}" ] &&
printf "%s" "[${prefix}] "
echo "${line}"
done
}
rwx_log_debug() {
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_DEBUG}" ]; then
_rwx_log "DEBUG" "${@}"
fi
}
rwx_log_error() {
local code="${1}"
shift
[ -n "${code}" ] || rwx_log_fatal 1 "No error code"
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_ERROR}" ]; then
_rwx_log "ERROR" "${@}" >&2
return "${code}"
fi
}
rwx_log_fatal() {
local code="${1}"
shift
[ -n "${code}" ] || rwx_log_fatal 1 "No error code"
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_FATAL}" ]; then
_rwx_log "FATAL" "${@}" >&2
exit "${code}"
fi
}
#= rwx_log
rwx_log_info() {
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_INFO}" ]; then
_rwx_log "" "${@}"
fi
}
rwx_log_trace() {
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_TRACE}" ]; then
_rwx_log "TRACE" "${@}"
fi
}
rwx_log_warn() {
if [ "${rwx_log_level}" -ge "${RWX_LOG_LEVEL_WARN}" ]; then
_rwx_log " WARN" "${@}"
fi
}