同时盯多个日志源的三种做法
并行观察多个日志源的主流手段有三类:tail -F 一次接收多个文件(会自动加 ==> 文件名 <== 分隔头)、tmux 分屏让每个窗格跟一个来源、multitail 在一个终端里分窗并做正则高亮。共同点是不用开一堆 SSH 会话,切换成本低;差别在于 tmux 可以 detach 后保留观察现场,multitail 能过滤与配色,tail 最通用、任何最小化系统都有。
基本信息
| 适用平台 | Linux / macOS(tmux、multitail 需另行安装) |
|---|---|
| 权限要求 | 按日志文件权限而定;journalctl 需 root 或加入 systemd-journal 组 |
| 常用组合 | tail -F + tee 存盘;tmux 常驻观察;multitail 高亮过滤 |
| 关键点 | 一律用 -F 而不是 -f,才能在日志轮转后继续跟随新文件 |
典型使用场景
- 发版或上线期间同时观察 Nginx 错误日志与应用日志,判断报错出在哪一层
- 压测/演练时并行盯网关、应用、数据库三处输出
- 接口 500 但应用无异常:access 日志与应用日志对照,确认是上游还是本地
- 需要长时间观察又不能一直占着终端:tmux 里跑着,第二天 attach 回来看
- 文件日志与 systemd 单元日志混看,用同一块屏幕对齐时间线
常用示例
常用示例
tail -F /var/log/nginx/error.log /var/log/myapp/app.log # 多文件,输出带 ==> 文件名 <== 头
tail -n 0 -F /var/log/nginx/access.log # -n 0 只看新行,不回看历史
tail -F /var/log/myapp/app.log | tee -a /tmp/observe-$(date +%F_%H%M).log # 边看边存
journalctl -u myapp -f -p warning # 只跟 warning 及以上级别
tmux new -s logs # 建会话:Ctrl+B % 竖分屏,Ctrl+B o 切窗格
# 窗格1: tail -F /var/log/nginx/error.log # 窗格2: journalctl -u myapp -f
# 离开 Ctrl+B d 保留会话 回来 tmux attach -t logs 结束 Ctrl+C 后 exit
multitail -i /var/log/nginx/access.log -i /var/log/myapp/app.log # 需安装 multitail工具选型
| 工具 | 优势 | 局限 |
|---|---|---|
| tail -F 多文件 | 零依赖、自动带文件名分隔头 | 内容混排,不支持过滤高亮 |
| tmux 分屏 | 会话可 detach/attach,适合长跑观察 | 要记快捷键,滚动缓冲默认有限 |
| multitail | 分窗、正则高亮、可按关键字过滤 | 需安装,参数要现查文档 |
| journalctl -f | 结构化字段、按优先级与时间过滤 | 仅适用于 systemd 单元日志 |
日志轮转是选择 -F 的理由:-f 只跟当前 inode,轮转后跟丢新文件却看起来“日志不再更新”;-F 会按文件名重新打开。
长时间滚屏会顶掉关键信息:重要输出同步 tee 到文件,或把窗格设为只滚关键行(tail -F 配合 grep 过滤)。