早上看了一篇文章,盘点一些小而美的终端命令行工具,里面提到lnav,感觉挺高级的
对这个工具挺感兴趣,最近公司项目,由于性能太好,用户增长很快,日志增长也越来越快,一天要产生几个g的日志,所以如何快速的从日志中找出来问题,确实是个大问题。
虽然我比较善用grep等工具,毕竟每次写正则表达式还是比较费脑。
所以开始折腾吧!
一些介绍文章链接
安装
我这里是mac,这么安装
brew install lnav
安装好,找到一个线上日志,lnav gateway.log
看上面的文章,我挺满怀期待的,结果没有高亮,按键e 也没有跳到相应的error位置。
开始分析
所以开始看文档吧,折腾陌生的软件的问题,也是学习成长的一种方式。
初步判断,应该是我的日志格式,lnav内置的格式中没有。
我的代码里是这样写的:
fmt.Fprintf(b, "[%s] [%s] [%s] %s ", r.Call.String(), lvl, r.Time.Format(termTimeFormat), r.Msg)
这是一个输出
[app.go:248] [INFO] [02-19|00:00:05.050] recv new challenge module=app round=92164 height=39448849
处理
软件不支持,就给支持一个呗。
官方推荐你使用regex101 来生成正则表达式匹配日志规则
然后再通过,
lnav -m regex101 import <regex101-url> <format-name> [<regex-name>]
来建立一个配置文件,文件生成在~/.lnav/formats/installed/ 目录
我的正则表达式这么写的,
\[(?P<filename>.*)?\].*\[(?P<level>.*)?\].*\[(?P<timestamp>.*)?\](?P<body>.*)$
就是4个变量,匹配文件名、级别、时间、内容
再运行一次
lnav gateway.log
发现一个错误,timestamp不支持
输出提示,配置timestamp-format就可以搞定,搜索了一下他的其他格式,
因为我使用的,[02-19|00:00:05.050] 是和标准的不一样,搞定他:
"timestamp-format": [
"%m-%d|%H:%M:%S.%L",
"%m-%d|%H:%M:%S,%L"
],
依然没有高亮,
发现可能是level的单词问题,
加入一个段来专门设置这个:
"level": {
"error": "EROR",
"warning": "WARN",
"debug": "DEBUG",
"info": "INFO"
},
好了,再来
后面两个设置是直接修改的,你倒入的~/.lnav/formats/installed/的文件
现在lnav的高亮,按e跳到error就都支持起来了。
Top comments (0)