lnav 自定义日志格式支持

  • 晓道
  • 更新于 2023-02-26 13:14
  • 阅读 1753

lnav 自定义日志格式支持

早上看了一篇文章,盘点一些小而美的终端命令行工具,里面提到lnav,感觉挺高级的

对这个工具挺感兴趣,最近公司项目,由于性能太好,用户增长很快,日志增长也越来越快,一天要产生几个g的日志,所以如何快速的从日志中找出来问题,确实是个大问题。

虽然我比较善用grep等工具,毕竟每次写正则表达式还是比较费脑。

所以开始折腾吧!

一些介绍文章链接

lnav-日志查看器

lnav:Linux 下一个基于控制台的高级日志文件查看器

安装

我这里是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

处理

软件不支持,就给支持一个呗。

官方文档 Defining a New Format

官方推荐你使用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就都支持起来了。

  • 原创
  • 学分: 3
  • 分类: Go
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
该文章收录于 晓道秘籍
1 订阅 5 篇文章

0 条评论

请先 登录 后评论
晓道
晓道
0xdD09...9161
技术交流:https://t.me/realDAO