json-log-viewer:218⭐的交互式 JSON 日志查看器,命令行下的结构化日志分析利器
json-log-viewer:218⭐的交互式 JSON 日志查看器
在微服务和容器化时代,JSON 格式的结构化日志已成为标准。但当需要在服务器上快速查看这些日志时,原始 JSON 的可读性往往很差。json-log-viewer 是一个仅 218 stars 的小众工具,它用 Go 语言编写,基于 Bubble Tea TUI 框架,为命令行环境提供了交互式的 JSON 日志浏览体验。
项目概览
| 属性 | 内容 |
|---|---|
| GitHub | hedhyw/json-log-viewer |
| Stars | 218 |
| 语言 | Go |
| 特点 | 交互式 TUI、实时筛选、多格式解析 |
| 最后更新 | 2周前 |
它解决了什么问题
处理 JSON 日志时,开发者经常面临这些困扰:
- 直接用
cat或tail查看,JSON 嵌套结构难以阅读 - 使用
jq需要记忆查询语法,临时分析效率不高 - 大型日志文件在普通编辑器中打开缓慢
- 需要快速按时间、级别、字段筛选日志条目
json-log-viewer 把问题简化成:打开文件,用方向键浏览,按 / 搜索,按 q 退出。
核心特性
交互式 TUI 界面
基于 Bubble Tea 框架构建的终端用户界面:
- 方向键导航:↑↓ 浏览日志条目,←→ 展开/折叠嵌套 JSON
- 实时筛选:输入关键词即时过滤日志,无需等待
- 字段高亮:自动识别常见字段(level、timestamp、message)并着色
- 响应式设计:自动适配终端窗口大小
智能日志解析
支持多种常见的 JSON 日志格式:
// 标准结构化日志
{"level": "error", "timestamp": "2025-01-15T10:30:00Z", "message": "Connection failed"}
// 嵌套对象自动展开
{"level": "info", "data": {"user_id": 123, "action": "login", "ip": "192.168.1.1"}}
// 数组字段支持
{"tags": ["api", "v2", "critical"], "duration_ms": 45}
对于非 JSON 行,工具会自动回退到纯文本模式,确保混合日志也能正常显示。
强大的筛选能力
内置多种筛选方式:
| 快捷键 | 功能 |
|---|---|
/ | 全局文本搜索 |
l | 按日志级别筛选 (DEBUG/INFO/WARN/ERROR) |
t | 按时间范围筛选 |
f | 按特定字段值筛选 |
r | 重置所有筛选条件 |
筛选是实时应用的,大型日志文件也能保持流畅的交互体验。
快速开始
# 通过 Homebrew 安装
brew install hedhyw/tap/json-log-viewer
# 或下载预编译二进制文件
wget https://github.com/hedhyw/json-log-viewer/releases/latest/download/json-log-viewer_linux_amd64
chmod +x json-log-viewer_linux_amd64
sudo mv json-log-viewer_linux_amd64 /usr/local/bin/jlv
# 使用
jlv /var/log/myapp/app.log
jlv < kubectl logs pod/myapp-xxx
kubectl logs -f pod/myapp-xxx | jlv
典型工作流
场景一:排查生产环境错误
# 查看最近 1000 条日志,筛选 ERROR 级别
kubectl logs --tail=1000 deployment/api | jlv
# 然后按 'l' 选择 ERROR 级别
场景二:分析特定用户的请求
# 打开日志后,按 'f' 字段筛选
# 输入字段名: user_id
# 输入值: 12345
场景三:实时跟踪日志流
# 支持管道输入,可以实时查看
tail -f /var/log/app.log | jlv
对比:json-log-viewer 与其他工具
| 工具 | Stars | 定位 | 核心差异 |
|---|---|---|---|
| jq | 30k+ | JSON 处理利器 | 功能强大但学习曲线陡峭,非交互式 |
| fx | 20k+ | 终端 JSON 查看器 | 支持交互式浏览,但专为单条 JSON 设计 |
| grc | 5k+ | 通用日志着色器 | 仅着色,不支持结构化解析和筛选 |
| lnav | 6k+ | 高级日志查看器 | 功能全面但较重,专为系统日志优化 |
| json-log-viewer | 218 | 专精 JSON 日志 | 轻量、交互式、专为 JSON 结构优化 |
json-log-viewer 的定位很清晰:不做通用工具,专注把「在终端查看 JSON 日志」这件事做到极致。
技术亮点
Go + Bubble Tea 的现代 TUI 架构
项目采用 Go 语言生态中新兴的 TUI 技术栈:
- Bubble Tea:The Elm Architecture 的 Go 实现,响应式 UI 更新
- Bubbles:预置组件库(列表、输入框、帮助界面)
- Lipgloss:声明式样式系统,类似 CSS 的终端样式
这种架构让代码保持简洁的同时,提供了现代终端应用应有的交互体验。
流式处理大文件
实现上采用流式读取而非一次性加载:
// 伪代码示意
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
entry := parseJSON(line)
if matchesFilter(entry) {
display(entry)
}
}
这意味着即使是 GB 级别的日志文件,也能秒开并开始浏览。
适用场景
- 容器化部署环境:SSH 到服务器后快速查看容器日志
- CI/CD 流水线调试:分析构建日志中的结构化输出
- 微服务日志追踪:在多个服务的 JSON 日志中定位问题
- 开发调试:本地运行时实时查看应用日志
当前限制
- 仅支持 JSON:纯文本日志只能原样显示,无结构化优势
- 无持久化配置:每次启动都是默认状态,不支持保存常用筛选
- 单文件浏览:不支持同时打开多个文件对比
- 社区规模小:218 stars 说明用户基数有限,遇到边缘情况可能需要自己排查
总结
json-log-viewer 是一个「小而精」的工具。它没有试图成为全能型日志平台,而是专注解决一个具体问题:在终端里高效查看 JSON 日志。218 stars 的小众体量反而让它保持了简洁——没有过多功能,没有配置负担,打开即用。
如果你经常需要在 SSH 会话中查看结构化日志,或者厌烦了 jq 的记忆负担,这个工具值得加入你的工具箱。毕竟,能把一个简单场景做到极致的工具,往往比大而全的方案更可靠。
| 属性 | 内容 |
|---|---|
| 仓库 | https://github.com/hedhyw/json-log-viewer |
| 许可证 | MIT |
| 语言 | Go |
| 维护者 | @hedhyw |