readonly ERROR=1 readonly WARNING=2 readonly INFO=4 readonly DEBUG=8 readonly ALL=15 VERBOSE_FLAGS=${ALL} mapType() { case "${1}" in e | error ) echo "${ERROR}" ;; w | warning ) echo "${WARNING}" ;; i | info ) echo "${INFO}" ;; d | debug ) echo "${DEBUG}" ;; * ) createIsoLogger -m "Invalid type '${1}'" -T "LOGGER"; return 1 ;; esac } createIsoLogger() { TYPE="${ERROR}" MSG="" SCRIPT="$(basename "${BASH_SOURCE[1]}")" LINE="${BASH_LINENO[0]}" while true; do case "${1}" in -t | --type ) TYPE="$(mapType "${2}")" || return; shift; shift ;; -T | --tag ) TAG="${2}"; shift; shift ;; -m | --message ) MSG="${2}"; shift; shift ;; -s | --script ) SCRIPT="${2}"; shift; shift ;; -l | --line ) LINE="${2}"; shift; shift ;; -* ) createIsoLogger -m "Unrecognized option '${1}'" -T "LOGGER"; return ;; * ) break ;; esac done if [ "$((${VERBOSE_FLAGS} & ${TYPE}))" -eq "${TYPE}" ]; then if [ -z "${TAG}" ]; then LOG_LINE="[${SCRIPT}]: line ${LINE}: ${MSG}" else LOG_LINE="[${SCRIPT}]: line ${LINE}: [${TAG}]: ${MSG}" fi case "${TYPE}" in "${ERROR}" ) LOG_LINE="\033[38;5;9m[ERROR]: ${LOG_LINE}\033[0m" ;; "${WARNING}" ) LOG_LINE="\033[38;5;11m[WARNING]: ${LOG_LINE}\033[0m" ;; "${INFO}" ) LOG_LINE="\033[38;5;10m[INFO]: ${LOG_LINE}\033[0m" ;; "${DEBUG}" ) LOG_LINE="\033[38;5;6m[DEBUG]: ${LOG_LINE}\033[0m" ;; * ) createIsoLogger -m "Invalid type '${TYPE}'" -T "LOGGER"; return ;; esac echo -e "${LOG_LINE}" 1>&2 echo -e "${LOG_LINE}" >> "${LOG_FILE}" else createIsoLogger -m "Tried to use disabled type '${TYPE}'" -T "LOGGER" return fi if [ "${TYPE}" -eq "${ERROR}" ]; then /bin/bash fi } true