Shell學習筆記06--日誌輸出模塊

#!/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)"
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章