#!/bin/bash
# Log Module
# usage: log_info|log_warn|log_error "msg"
set -e
#日誌有三個等級INFO/WARNING/ERROR
readonly LOG_LEVEL_INFO=1
readonly LOG_LEVEL_WARNING=2
readonly LOG_LEVEL_ERROR=3
if [[ ! "$PROJECT_LOG_LEVEL" ]]; then
#如果沒有外部環境變量定義,則默認日誌等級爲INFO
export PROJECT_LOG_LEVEL="$LOG_LEVEL_INFO"
fi
function common_log(){
local log_type="$1"
local msg="$2"
local caller_info="$3"
local file_name=$(echo "$caller_info" | awk '{print $3}')
local line_num=$(echo "$caller_info" | awk '{print $1}')
local date_time=$(date '+%Y/%m/%d %H:%M:%S')
local log_format="[${date_time}][${file_name}:${line_num}] ${msg}"
case "$log_type" in
"$LOG_LEVEL_INFO")
log_format="[info]${log_format}" ;;
"$LOG_LEVEL_WARNING")
log_format="\033[33m[warning]${log_format}\033[0m" ;;
"$LOG_LEVEL_ERROR")
log_format="\033[31m[error]${log_format}\033[0m" ;;
esac
if [[ "$log_type" -ge "$PROJECT_LOG_LEVEL" ]]; then
echo -e "${log_format}"
fi
}
function log_info(){
common_log "$LOG_LEVEL_INFO" "$1" "$(caller 0)"
}
function log_warn(){
common_log "$LOG_LEVEL_WARNING" "$1" "$(caller 0)"
}
function log_error(){
common_log "$LOG_LEVEL_ERROR" "$1" "$(caller 0)"
}