Files
alpine/prebuilds/usr/local/lib/liblog.sh
T

98 lines
2.3 KiB
Bash

#!/bin/bash
# Ver: 1.2 by Endial Fang (endial@126.com)
#
# 日志输出函数库
#[[ ${ENV_DEBUG:-false} = true ]] && set -x
MODULE="$(basename "$0")"
# 定义颜色代码函数
get_color_code() {
local color="$1"
case "$color" in
"reset") echo '\033[0m' ;;
"red") echo '\033[38;5;1m' ;;
"green") echo '\033[38;5;2m' ;;
"yellow") echo '\033[38;5;3m' ;;
"blue") echo '\033[38;5;4m' ;;
"magenta") echo '\033[38;5;5m' ;;
"cyan") echo '\033[38;5;6m' ;;
*) echo "" ;;
esac
}
# 打印输出到 STDERR 设备
stderr_print() {
printf "%b\\n" "${*}" >&2
}
# 判断是否处于调试模式
is_debug_mode() {
local debug_var="${ENV_DEBUG:-false}"
shopt -s nocasematch
[[ "$debug_var" = 1 || "$debug_var" =~ ^(yes|true)$ ]]
}
# 输出实际日志信息
# 参数:
# $1 - 日志信息
log() {
local debug_info
if is_debug_mode; then
debug_info="$(get_color_code "cyan")${APP_NAME:-}:${MODULE:-}"
else
debug_info="$(get_color_code "cyan")${APP_NAME:-}"
fi
local timestamp="$(get_color_code "magenta")$(date "+%F %T.%3N")$(get_color_code "reset")"
stderr_print "$debug_info $timestamp $*"
}
# 输出调试类日志信息,尽量少使用
# 参数:
# $1 - 日志信息
debug() {
if is_debug_mode; then
log "$(get_color_code "blue")DBG$(get_color_code "reset"): $*"
fi
}
# 输出提示信息类日志信息
# 参数:
# $1 - 日志信息
info() {
log "$(get_color_code "green")INF$(get_color_code "reset"): $*"
}
# 输出警告类日志信息至sterr
# 参数:
# $1 - 日志信息
warn() {
log "$(get_color_code "yellow")WRN$(get_color_code "reset"): $*"
}
# 输出错误类日志信息至sterr,并退出脚本
# 参数:
# $1 - 日志信息
error() {
log "$(get_color_code "red")ERR$(get_color_code "reset"): $*"
}
# 缩进一个字符串
# 参数:
# $1 - 待缩进的字符串 (默认为空字符串)
# $2 - 缩进的字符数 (默认: 4)
# $3 - 缩进使用的字符 (默认: " ")
indent() {
local string="${1:-}"
local num="${2:?missing num}"
local char="${3:-" "}"
# 生成缩进填充的字符串
local indent_unit=""
for ((i = 0; i < num; i++)); do
indent_unit="${indent_unit}${char}"
done
echo "$string" | sed "s/^/${indent_unit}/"
}