navi/test/log.sh

103 lines
2.4 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
_export_colors() {
if ! ${DOT_COLORS_EXPORTED:-false}; then
if [ -z ${TERM:-} ] || [ $TERM = "dumb" ]; then
bold=""
underline=""
freset=""
purple=""
red=""
green=""
tan=""
blue=""
else
bold=$(tput bold)
underline=$(tput sgr 0 1)
freset=$(tput sgr0)
purple=$(tput setaf 171)
red=$(tput setaf 1)
green=$(tput setaf 76)
tan=$(tput setaf 3)
blue=$(tput setaf 38)
fi
log_black=30
log_red=31
log_green=32
log_yellow=33
log_blue=34
log_purple=35
log_cyan=36
log_white=37
log_regular=0
log_bold=1
log_underline=4
readonly DOT_COLORS_EXPORTED=true
fi
}
log::color() {
_export_colors
local bg=false
case "$@" in
*reset*) echo "\e[0m"; exit 0 ;;
*black*) color=$log_black ;;
*red*) color=$log_red ;;
*green*) color=$log_green ;;
*yellow*) color=$log_yellow ;;
*blue*) color=$log_blue ;;
*purple*) color=$log_purple ;;
*cyan*) color=$log_cyan ;;
*white*) color=$log_white ;;
esac
case "$@" in
*regular*) mod=$log_regular ;;
*bold*) mod=$log_bold ;;
*underline*) mod=$log_underline ;;
esac
case "$@" in
*background*) bg=true ;;
*bg*) bg=true ;;
esac
if $bg; then
echo "\e[${color}m"
else
echo "\e[${mod:-$log_regular};${color}m"
fi
}
if [ -z ${LOG_FILE+x} ]; then
readonly LOG_FILE="/tmp/$(basename "$0").log"
fi
_log() {
local template=$1
shift
if ${log_to_file:-false}; then
echo -e $(printf "$template" "$@") | tee -a "$LOG_FILE" >&2
else
echo -e $(printf "$template" "$@")
fi
}
_header() {
local TOTAL_CHARS=60
local total=$TOTAL_CHARS-2
local size=${#1}
local left=$((($total - $size) / 2))
local right=$(($total - $size - $left))
printf "%${left}s" '' | tr ' ' =
printf " $1 "
printf "%${right}s" '' | tr ' ' =
}
log::header() { _export_colors && _log "\n${bold}${purple}$(_header "$1")${freset}\n"; }
log::success() { _export_colors && _log "${green}✔ %s${freset}\n" "$@"; }
log::error() { _export_colors && _log "${red}✖ %s${freset}\n" "$@"; }
log::warning() { _export_colors && _log "${tan}➜ %s${freset}\n" "$@"; }
log::note() { _export_colors && _log "${blue}➜ %s${freset}\n" "$@"; }