[Linux]Shell根据日志等级不同, tail/cat的时候输出不同的颜色

2021-03-29 45点热度 0人点赞 0条评论

前言

我们平时在Linux的shell上查看开发程序输出日志的时候(一般用cat或者tail -f /path/to/logfile),默认看到的都是一种颜色的,在IDEA里开发的时候,我们发现,不同的日志级别(DEBUG/INFO/WARN/ERROR)输出的日志颜色不一样,这样就一目了然能看到哪些日志比较重要或要重点关注。

有关tail的基础用法,请看:https://blog.terrynow.com/2021/03/15/linux-shell-tail-head-usage-sample/

实现

实现原理很简单:我们来看一个普通的开发输出日志

2021-03-29 09:32:11 [DEBUG]SystemServiceImpl - test debug output log
2021-03-29 09:32:12 [INFO]SystemServiceImpl - test info output log
2021-03-29 09:32:13 [WARN]SystemServiceImpl - test warn output log
2021-03-29 09:32:14 [ERROR]SystemServiceImpl - test error output log

我们只要利用awk命令,查找每一行里面有关键词

DEBUG/INFO/WARN/ERROR

再改变这一行的输出颜色就可以了。

看下效果:

https://github.com/raducotescu/ctail有高手已经写好了shell脚本(ctail就是用脚本写的),只要运行ctail -f /path/to/logfile 就可以查看带颜色的日志了。

上面github上只有ctail的脚本,稍加修改(把里面关于tail的地方,都修改成cat),那么就可以实现

cat /path/to/logfile

也可以查看带颜色的日志了。

如果你的日志文件里没有

DEBUG/INFO/WARN/ERROR

这些关键词,或者是别的关键词,或者你要添加、修改日志的颜色,也提供了配置文件,只要稍加修改配置文件里的关键词就可以了。

另外很可能你的国内服务器连不上github,我已经把需要的脚本放在我的cloudflare上了,只需要一键运行如下,就可以了(当然如果不放心可以看下下载到的ccat和ctail的内容,或者从原版github上去下载):

#下载安装

#ctail脚本
wget -O /usr/local/bin/ctail https://www.terrynow.com/resources/ctail
#ccat脚本
wget -O /usr/local/bin/ccat https://www.terrynow.com/resources/ccat
#ctail.conf配置文件,如果你的日志文件里的判断日志级别关键词不一样,请尝试修改
wget -O /usr/local/bin/ctail.conf https://www.terrynow.com/resources/ctail.conf
#ccat.conf配置文件,如果你的日志文件里的判断日志级别关键词不一样,请尝试修改
wget -O /usr/local/bin/ccat.conf https://www.terrynow.com/resources/ccat.conf

#修改ctail可执行
chmod +x /usr/local/bin/ctail
#修改ccat可执行
chmod +x /usr/local/bin/ccat

  
#使用
ctail -f /path/to/logfile.log
ccat /path/to/logfile.log

当然你如果以上脚本都不装,只是想临时输出日志颜色,那么利用awk实现以下也可以(只是代码有点长🙈)如下:

# 直接使用awk输出颜色
tail -f /path/to/logfile.log | awk '{if ($0 ~ /INFO/) print "\033[37m" $0 "\033[39m"; else if ($0 ~ /DEBUG/) print "\033[36m" $0 "\033[39m"; else if ($0 ~ /WARN/) print "\033[33m" $0 "\033[39m"; else if ($0 ~ /ERROR/) print "\033[31m" $0 "\033[39m"; else print $0}'

cat /path/to/logfile.log | awk '{if ($0 ~ /INFO/) print "\033[37m" $0 "\033[39m"; else if ($0 ~ /DEBUG/) print "\033[36m" $0 "\033[39m"; else if ($0 ~ /WARN/) print "\033[33m" $0 "\033[39m"; else if ($0 ~ /ERROR/) print "\033[31m" $0 "\033[39m"; else print $0}'

 

admin

这个人很懒,什么都没留下

文章评论

*

code