# # set +o errexit -o noglob -o nounset is assumed. # # # Private globals and subroutines # RTLP_LOG_NO_ATTR=0; RTLP_LOG_FNAME=""; RTLP_LOG_LVL="0"; rtl_log_set_fname() { RTLP_LOG_FNAME="${1}"; }; rtl_log_set_lvl() { RTLP_LOG_LVL="${1}"; }; rtl_log_set_no_attr() { RTLP_LOG_NO_ATTR="${1}"; }; rtlp_log_printf() { local _attr="${1}" _fmt="${2}"; shift 2; _msg="$(printf "${_fmt}" "${@}")"; if [ -n "${RTLP_LOG_FNAME}" ]; then printf "%s\n" "${_msg}" >> "${RTLP_LOG_FNAME}"; fi; if [ "${RTLP_LOG_NO_ATTR:-0}" -eq 0 ]; then printf "\033[0m\033[${_attr}m%s\033[0m\n" "${_msg}"; else printf "%s\n" "${_msg}"; fi; }; # # Public globals # RTL_LOG_MSG_FATAL_COLOUR=91; # Bright red RTL_LOG_MSG_WARNING_COLOUR=31; # Dark red RTL_LOG_MSG_SUCCESS_COLOUR=33; # Dark yellow RTL_LOG_MSG_SUCCESS_END_COLOUR=32; # Dark green RTL_LOG_MSG_INFO_COLOUR=93; # Bright yellow RTL_LOG_MSG_INFO_END_COLOUR=92; # Bright green RTL_LOG_MSG_NOTICE_COLOUR=96; # Bright cyan RTL_LOG_MSG_VERBOSE_COLOUR=90; # Dark grey RTL_LOG_MSG_DEBUG_COLOUR=36; # Dark cyan rtl_log_env_vars() { local _arg_len_max=0; rtl_log_msg info "Variables for this ${1:-build}:"; shift; _arg_len_max="$(rtl_lmax "${@}")"; while [ "${#}" -gt 0 ]; do rtl_log_msg info \ "%${_arg_len_max}.${_arg_len_max}s=%s" \ "${1%%=*}" "$(rtl_get_var_unsafe "${1#*=}")"; shift; done; }; rtl_log_msg() { local _lvl="${1}" _fmt="${2}" _attr=""; shift 2; case "${RTLP_LOG_LVL:-0}" in 0) rtl_lmatch "notice verbose debug" "${_lvl}" && return; ;; 1) rtl_lmatch "verbose debug" "${_lvl}" && return; ;; 2) rtl_lmatch "debug" "${_lvl}" && return; ;; 3) ;; esac; case "${_lvl}" in fatal|fatalexit) _attr="${RTL_LOG_MSG_FATAL_COLOUR}"; ;; warning) _attr="${RTL_LOG_MSG_WARNING_COLOUR}"; ;; success) _attr="${RTL_LOG_MSG_SUCCESS_COLOUR}"; ;; success_end) _attr="${RTL_LOG_MSG_SUCCESS_END_COLOUR}"; ;; info) _attr="${RTL_LOG_MSG_INFO_COLOUR}"; ;; info_end) _attr="${RTL_LOG_MSG_INFO_END_COLOUR}"; ;; notice) _attr="${RTL_LOG_MSG_NOTICE_COLOUR}"; ;; verbose) _attr="${RTL_LOG_MSG_VERBOSE_COLOUR}"; ;; debug) _attr="${RTL_LOG_MSG_DEBUG_COLOUR}"; ;; esac; rtlp_log_printf "${_attr}" "==> %s ${_fmt}" "$(rtl_date)" "${@}"; if [ "x${_lvl}" = "xfatalexit" ]; then exit 1; fi; }; # vim:filetype=sh