资讯专栏INFORMATION COLUMN

07 linux 一个完整的shell脚本调试工具

不知名网友 / 2561人阅读

摘要:常用的日志输出形式通过编辑需要调试的脚本,在脚本很多行使用输出不同的内容来作为调试的依据通常小篇幅的脚本,使用的形式来调试,木的问题。如此,脚本就编程谁调用,谁给日志配置日志等级和日志输出路径。中的方法有待优化。


执行shell脚本时,常常会打印一些日志到控制台,根据输出的日志,来判断脚本功能正确与否。

常用的日志输出形式

通过Vim编辑需要调试的脚本,在脚本很多行使用echo输出不同的内容来作为调试的依据

[userwin@MiWiFi-R3L-srv temp]$ echo "This is a test log"This is a test log

通常小篇幅的shell 脚本,使用echo的形式来调试,木的问题。
但是如果shell脚本有上千行,且逻辑复杂的情况下,这种就很难满足要求。

使用OOP编程思想设计log函数

[userwin@MiWiFi-R3L-srv temp]$ vim log.sh#!/bin/bashfunction log(){        echo "$@"}
[userwin@MiWiFi-R3L-srv temp]$ vim debug.sh#!/bin/bashsource ./log.shlog "test log funciton"log "today is `date "+%Y-%m-%d"` "
[userwin@MiWiFi-R3L-srv temp]$ sh debug.sh test log funcitontoday is 2021-11-26

让log方法象log4j一样 输出时前面带日期和时间

[userwin@MiWiFi-R3L-srv temp]$ vim log.sh#!/bin/bashfunction log(){        echo "$(date "+%Y-%m-%d %H:%M:%S") $@"}
[userwin@MiWiFi-R3L-srv temp]$ sh debug.sh 2021-11-26 00:04:53 test log funciton2021-11-26 00:04:53 today is 2021-11-26 

为日志输出添加开关

LOG_OPEN=1 即为Log日志的开关。

[userwin@MiWiFi-R3L-srv temp]$ cat log.sh #!/bin/bashLOG_OPEN=1function log(){	[ $LOG_OPEN -eq 1 ]  && echo "$(date "+%Y-%m-%d %H:%M:%S") $@"}

划分日志等级 并添加颜色

[userwin@MiWiFi-R3L-srv temp]$ vim log.sh #!/bin/bash#日志级别 debug-1, info-2, warn-3, error-4, always-5LOG_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"}

调用

[userwin@MiWiFi-R3L-srv temp]$ vim test.sh #!/bin/bashsource ./log.shlog_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.."

输出结果

[userwin@MiWiFi-R3L-srv temp]$ sh test.sh  [WARN] 2021-11-28 23:05:23 this is warn log...  [ERROR] 2021-11-28 23:05:23 this is error log...  [ALWAYS] 2021-11-28 23:05:23 this is always log.. 

输出到文件

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

调用

[userwin@MiWiFi-R3L-srv temp]$ vim test.sh #!/bin/bashsource ./logFile.shlog_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.."

输出结果:

[userwin@MiWiFi-R3L-srv temp]$ cat log.txt [WARN] 2021-11-28 23:09:00 this is warn log...[ERROR] 2021-11-28 23:09:00 this is error log...[ALWAYS] 2021-11-28 23:09:00 this is always log..

为什么输出没有颜色? 见下图


修改输出信息如下就有颜色处处了

输出记过

总结

脚本还有待完善,目前有如下几个想法
1:创建log.cfg配置文件,放如下配置

#日志级别 debug-1, info-2, warn-3, error-4, always-5LOG_LEVEL=3#日志文件LOG_FILE=./log.txt

修改 logFile.sh 如果读取log.cfg 有值,则取其值;无值,给个默认值。

2:将这两个配置写在调用shell 脚本中,并将这个量变量导入环境变量中,如果logFile.sh 没有取到系统变量,就给个默认值。
如此,脚本就编程谁调用,谁给日志配置日志等级和日志输出路径。

3: logFile.sh 中的方法有待优化。
以上三个想法留着后面补充吧!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125553.html

相关文章

  • 新书《全栈数据之门》完整目录

    摘要:全栈数据之门前言自强不息,厚德载物,自由之光,你是我的眼基础,从零开始之门文件操作权限管理软件安装实战经验与,文本处理文本工具的使用家族的使用综合案例数据工程,必备分析文件探索内容探索交差并补其他常用的命令批量操作结语快捷键,之门提高效率光 showImg(https://segmentfault.com/img/bVK0aK?w=350&h=350); 全栈数据之门 前言 自强不息,...

    yibinnn 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<