经过这几轮讨论,我觉得我们已经把很多工具的定位理顺了。
最大的收获其实不是学会了某个命令,而是发现:
不同类型的日志,需要不同的工作流。
你最开始想用 Quickfix、Trouble 解决的问题,本质上其实是日志结构问题,而不是查看器问题。
一、工具定位总结#
1. rg (ripgrep)#
定位:
日志过滤器
代码搜索器text作用:
rg '\[ROS\]' mapping-app.log
rg 'timeout'
rg 'ERROR'
rg '/database/config'bash特点:
✅ 超快
✅ 支持正则
✅ 递归搜索
✅ 默认高亮
❌ 不负责阅读
❌ 不负责导航
我的理解:
rg = SQL 的 WHEREtext2. fd#
定位:
文件过滤器text作用:
fd log
fd mapping
fd '*.gz'bash特点:
find 的现代版text我的理解:
fd = SQL 的 FROMtext3. fzf#
定位:
交互式筛选器text作用:
fd | fzf
rg error | fzfbash特点:
二次过滤text我的理解:
fzf = WHERE 之后再加一个搜索框text4. less#
定位:
超大文件阅读器text作用:
less mapping-app.logbash搜索:
/keyword
n
Ntext特点:
✅ 几GB日志不卡
✅ SSH环境都有
❌ 多文件分析不方便
❌ 时间线分析不方便
适合:
Linux系统日志
Nginx日志
服务日志text5. Nvim#
定位:
分析平台text不是编辑器。
作用:
nvim mapping-app.logbash或者:
nvim ros.log api.log timeline.logbash特点:
✅ 多buffer
✅ 多window
✅ tmux配合
✅ 搜索
✅ 高亮
我的理解:
Nvim = 日志分析工作台text二、Quickfix#
定位:
导航器text不是日志查看器。
内部数据:
{
;(filename, line, column, text)
}ts来源:
Telescope
rg
grep
make
eslint
tsc
pytesttext查看:
:copenvim跳转:
:cnext
:cprevvim适合:
发现30个异常
逐个检查text不适合:
阅读日志
分析时间线text三、Trouble#
定位:
Quickfix高级UItext本质:
Quickfix
+
漂亮界面text适合:
代码错误
LSP诊断
搜索结果浏览text不适合:
日志分析text对于你:
可学
但优先级不高text四、Telescope#
定位:
搜索器text作用:
leader /text特点:
实时搜索
模糊匹配
预览textCtrl-q:
保存结果到Quickfixtext五、lnav#
定位:
日志数据库text适合:
Apache
Nginx
Systemdtext不适合:
krlog
自定义日志text六、你的 krlog 场景#
这是最重要的。
原始:
Android日志
+
WebLog
+
系统日志
+
JSON分段
+
乱序text问题:
日志本身不可读text所以:
先格式化
再分析text推荐工作流(krlog)#
第一步#
下载日志
krlog/text第二步#
提取
python krlog_extract.py krlog/bash生成:
mapping-app.logtext作用:
去Android噪音
还原分段日志
按id合并
按时间排序text第三步#
专题日志
ROS:
rg '\[ROS\]' mapping-app.log > ros.logbashAPI:
rg '\[API\]' mapping-app.log > api.logbash时间点:
rg '15:24:' mapping-app.log > timeline.logbash异常:
rg 'error|timeout|success\\":false' mapping-app.log > error.logbash第四步#
tmux
┌─────────────┬─────────────┐
│ ros.log │ api.log │
├─────────────┼─────────────┤
│ timeline │ error.log │
└─────────────┴─────────────┘text打开:
nvim ros.log api.log timeline.log error.logbash这才是我觉得最适合你的。
七、普通 Linux 日志#
例如:
journalctl
syslog
auth.log
kern.logtext推荐:
journalctl -xe
journalctl -u nginxbash过滤:
journalctl -u nginx | rg errorbash查看:
journalctl -u nginx | less -Rbash工作流:
journalctl
↓
rg
↓
lesstext八、Nginx 日志#
例如:
access.log
error.logtext查看:
less access.logbash搜索:
rg '500'bash统计:
rg '500' access.log | wc -lbash实时:
tail -f access.logbash工作流:
tail -f
↓
rg
↓
lesstext九、后台服务日志#
例如:
SpringBoot
Go
Node
Pythontext如果格式规范:
时间
级别
模块
消息text直接:
rg ERROR app.log
rg timeout app.logbash然后:
less -Rbash或者:
nvim app.logbash最终推荐#
按照优先级:
krlog(你的主战场)#
krlog_extract.py
↓
mapping-app.log
↓
rg
↓
专题日志
↓
tmux + nvimtext⭐⭐⭐⭐⭐
普通 Linux/Nginx#
journalctl
tail -f
↓
rg
↓
lesstext⭐⭐⭐⭐⭐
Quickfix/Trouble#
发现大量异常
↓
保存搜索结果
↓
逐个跳转检查text⭐⭐⭐
所以如果让我给你未来半年投入时间的顺序:
1. krlog_extract.py ⭐⭐⭐⭐⭐
2. rg ⭐⭐⭐⭐⭐
3. tmux + nvim 多窗口 ⭐⭐⭐⭐⭐
4. Telescope ⭐⭐⭐⭐
5. less ⭐⭐⭐⭐
6. Quickfix ⭐⭐⭐
7. Trouble ⭐⭐text对于你的机器人建图日志场景,真正能提升排查效率的,不是 Trouble,而是:
规范化日志
+
专题日志
+
多窗口时间线对照text这已经非常接近很多资深后端、SRE 最终形成的工作流了。