shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能
①设定日志级别,实现可以输出不同级别的日志信息,方便调试
②日志格式类似为:[日志级别] 时间 funcname:函数名 [lineno:行号] 日志信息
③不同级别,设定不同颜色
④让其变为函数库文件,重用代码
下面看看我用shell记录日志的进化之路
1.最简单的日志记录方式
对于刚入门的同学,记录日志一般用echo加重定向方式,这应该是最原始的方式了^_^
- 1
- 1
2.简单函数封装,简化重复写重定向到日志文件
当你想记录的日志变多,你得重复的写echo “”>$logfile,这也是件挺麻烦的事情,于是我就写了个log函数,这样修改的时候也比较方便。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
3.实现日志的级别不同颜色输出
某天使用某脚本的时候,报错了确没发现,于是就想将报错信息用不同颜色字体,这样会稍微友好一点,请看下面函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
4.实现设定日志级别,输出不同级别以上的日志,方便调试
学了Python的日志模块后,想着如何像python那样,可以设定日志级别,比如设定debug,那么只有debug级别以上的日志会输出,而且日志的格式也支持定义,常见格式 如下:[日志级别] 时间 funcname:函数名 [lineno:行号] 日志信息
请看如下的log函数:大家可以将log函数放到一个单独文件,称为函数库文件,然后写脚本的时候,通过source或 . 命令引入,就想python的导入模块一样,重用log的代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
输出如下:
在写这个函数的遇到一个问题就是不能用内建变量$LINENO来取得调用的行号,只能取得log函数中定义$LINENO那一行,搜了许久找到的解决办法是利用caller命令,关于caller命令的用法,如下:
5.caller的用法
caller命令放到函数中, 将会在stdout上打印出函数的调用者信息.,caller命令也可以在一个被source的脚本中返回调用者信息. 当然这个调用者就是source这个脚本的脚本. 就像函数一样, 这是一个”子例程调用”.你会发现这个命令在调试的时候特别有用.