Shell范例代码01--日志输出模块

折月煮酒 提交于 2020-02-21 10:06:28
#!/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)"
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!