json-log-viewer:218⭐的交互式 JSON 日志查看器

在微服务和容器化时代,JSON 格式的结构化日志已成为标准。但当需要在服务器上快速查看这些日志时,原始 JSON 的可读性往往很差。json-log-viewer 是一个仅 218 stars 的小众工具,它用 Go 语言编写,基于 Bubble Tea TUI 框架,为命令行环境提供了交互式的 JSON 日志浏览体验。

项目概览

属性内容
GitHubhedhyw/json-log-viewer
Stars218
语言Go
特点交互式 TUI、实时筛选、多格式解析
最后更新2周前

它解决了什么问题

处理 JSON 日志时,开发者经常面临这些困扰:

  • 直接用 cattail 查看,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定位核心差异
jq30k+JSON 处理利器功能强大但学习曲线陡峭,非交互式
fx20k+终端 JSON 查看器支持交互式浏览,但专为单条 JSON 设计
grc5k+通用日志着色器仅着色,不支持结构化解析和筛选
lnav6k+高级日志查看器功能全面但较重,专为系统日志优化
json-log-viewer218专精 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