前言
我们平时在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}'
文章评论