美文网首页
shell脚本打日志技巧

shell脚本打日志技巧

作者: 404d67ac8c12 | 来源:发表于2022-12-05 09:25 被阅读0次

    执行shell脚本时,常常会打印一些日志到控制台,根据输出的日志,来判断脚本功能正确与否。但是,太多日志打印的话,会让阅读变得很困难,从日志信息里面找到我们关心的那部分也变得很不方便了。所以,有一个好用的shell脚本日志接口是非常有必要的,本文将聊聊实践中日志打印的一些技巧。

    1、封装一个日志函数

    最简单的方式,是在shell脚本中通过echo来打印,缺点是要改动时需要每处都修改,所以我们可以封装一个函数:

    #!/bin/bash 
    function log()
    {   
        echo "$@"
    }
    //测试:
    log "this is a test..."
    log "today is `date '+%Y-%m-%d'` "
    

    通常,日志第一列是一个时间,修改如下:

    #!/bin/bash 
    function log()
    {   
        echo "$(date '+%Y-%m-%d %H:%M:%S') $@"
    } 
    log "this is a test..."
    

    输出:2021-07-27 19:55:54 this is a test...

    2、日志级别:

    #!/bin/bash 
    
    #日志级别 debug-1, info-2, warn-3, error-4, always-5
    LOG_LEVEL=3 #调试日志
    
    function log_debug()
    {  
        content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@"  
        [ $LOG_LEVEL -le 1  ] && echo -e "\033[32m"  ${content}  "\033[0m"}#信息日志
    
    function log_info()
    {  
        content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@"  
        [ $LOG_LEVEL -le 2  ] && echo -e "\033[32m"  ${content} "\033[0m"}#警告日志
    
    function log_warn()
    {  
        content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@"  
        [ $LOG_LEVEL -le 3  ] && echo -e "\033[33m" ${content} "\033[0m"}#错误日志
    
    function log_err()
    {  
        content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@"  
        [ $LOG_LEVEL -le 4  ] && echo -e "\033[31m" ${content} "\033[0m"}#一直都会打印的日志
    
    function log_always()
    {   
        content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@"   
        [ $LOG_LEVEL -le 5  ] && echo -e  "\033[32m" ${content} "\033[0m"
    }
    

    把日志级别分成 5 个等级,分别是 : debug日志、info日志、警告日志、错误日志、一直都打印的日志 ,每个级别对应一个函数接口,而且每个级别可以定义不同的字符颜色,方便在屏幕上查看错误以及警告,上述脚本中错误日志是红色,警告日志是黄色,其他级别的日志是绿色。例如:

    #!/bin/bash 
    
    source ./t.sh 
    
    log_debug "this is debug log..."
    log_info "this is info log..."
    log_warn "this is warn log..."
    log_err "this is error log..."
    log_always "this is always log.."
    

    把 脚本中 LOG_LEVEL 设置为 1 , 执行,结果如下输出:

    LOG_LEVEL 为 3 , 执行 ,结果如下:

    从上面两次结果可以知道,日志级别设置为 debug级别 ( LOG_LEVEL = 1 ) 时,所有的等级的日志都会输出,当把日志级别设置为 info级别 ( LOG_LEVEL = 3 ) 后,只输出 warn日志、error日志 以及 always日志

    如果想关闭所有级别的日志,把日志级别调到比 always日志 更高的级别,也即 LOG_LEVEL 的值大于 5 就行了。

    3、写入文件

    #日志文件
    LOG_FILE=./log.txt 
    function log()
    {   
        content="$(date '+%Y-%m-%d %H:%M:%S') $@"   
        echo $content >> $LOG_FILE
    }
    

    相关文章

      网友评论

          本文标题:shell脚本打日志技巧

          本文链接:https://www.haomeiwen.com/subject/ciibfdtx.html