执行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
}

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐