Shell中的日志模块
简述:
相信大家发现在编写Shell脚本时觉得最难的地方就是Shell脚本的调试,往往是费时费力的撸了几百行Shell脚本,一执行,发现没报任何错误(开心),但是发现预期的要求却没实现(哭死),最后只能一行一行的调试,这篇文章主要是想分享几个在实际项目中对调试比较有帮助的日志打印方式,内容比较简单。
日志分类:
在具体的Shell工程中对外输出大体分为几种:
标志 | 常用颜色 | 志分类 | 提示作用 |
---|---|---|---|
[INFO] | 绿色 | 正常输出 | 用于查看程序执行进度 |
[DEBUG] | 白色 | 调试输出 | 用于输出一些程序运行过程中的中间变量,用于调试与开发 |
[WARNING] | 黄色 | 告警信息 | 用于提示一些无关紧要但是又与预期不符的程序结果 |
[ERROR] | 红色 | 错误信息 | 一些会影响shell执行的严重错误 |
所以在shell编写中提前定义好日志与日志类型还是很关键的,接下来我就分别写下如何定义以及封装这些日志模块
INFO 类型
INFO类型的日志是日志分类中最简单也是最基础的一类日志,只需要将标示输出并且输出要打印的文字既可,代码如下:
#!/bin/bash
function INFO() {
msg=$1 #第一个参数 —— 要打印的文字
echo -e "\033[32m[INFO]\033[0m" ${msg}
}
#调用INFO方法
INFO "This is INFO"
WARNING 类型
WARNING与INFO类似只要起提示作用,只是颜色变得比较鲜艳
#!/bin/bash
function WARNING() {
msg=$1 #第一个参数 —— 要打印的文字
echo -e "\033[34m[WARNING]\033[0m" ${msg}
}
#调用INFO方法
WARNING "This is WARNING"
ERROR 类型
ERROR类型比较特殊,一般放在错误判断逻辑里,执行后打印错误信息并退出程序
function ERROR() {
msg=$1
echo -e "\033[31m[ERROR]\033[0m" ${msg}
exit -1 #这里退出代码不能为0,因为0表示正常退出,主要用于程序被调用的时候状态判定
}
ERROR "This is ERROR"
DEBUG 类型
DEBUG类型与INFO类型的区别就在于要将一些变量或者一些执行信息进行包裹,而且要根据配置信息进行选择是否要打开DEBUG
#!/bin/bash
DEBUG_FLAG=1 #1 | 0 全局变量用于判定是否打开debug模式
function DEBUG() {
msg=$1
echo [DEBUG] ${msg}
if [[ ${DEBUG_FLAG} = 1 ]];then
set -x #开启日志输出
fi
}
DEBUG "This is DEBUG"
process=hello
echo "This is Progress:"${process}
封装成log方法:
#!/bin/bash
function log() {
if [[ $# -eq 1 ]];then
msg=$1
echo -e "\033[32m[INFO]\033[0m" ${msg}
elif [[ $# -eq 2 ]];then
param=$1
msg=$2
if [[ ${param} = "-w" ]];then
echo -e "\033[34m[WARNING]\033[0m" ${msg}
elif [[ ${param} = "-e" ]];then
echo -e "\033[31m[ERROR]\033[0m" ${msg}
exit -1
elif [[ ${param} = "-d" ]];then
echo [DEBUG] ${msg}
if [[ ${DEBUG_FLAG} = 1 ]];then
set -x #开启日志输出
fi
fi
fi
}
function main() {
DEBUG_FLAG=1
log "this is INFO"
log -w "this is WARNING"
log -d "this is DEBUG"
log -e "this is ERROR"
}
main
常见文字颜色的表述方式:
#!/bin/bash
function main() {
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
}
main