在微服务和容器化时代,应用程序普遍采用结构化日志输出(JSON 格式)。这虽然便于机器解析,但人工阅读时却痛苦不堪——所有内容挤在一行,关键信息淹没在引号和转义字符中。

今天介绍的 fblog 就是来解决这个问题的。这是一个用 Rust 编写的轻量级命令行工具,能把 JSON 日志转换成人类可读的格式。

项目简介

  • 仓库: brocode/fblog
  • 语言: Rust
  • Stars: 558
  • 许可证: WTFPL(Do What The F*ck You Want To Public License)

fblog 的核心功能很简单:读取 JSON 格式的日志流,提取关键字段(如时间戳、日志级别、消息内容),然后以带颜色的表格形式输出到终端。

安装

# macOS/Linux 使用 Homebrew
brew install fblog

# 或使用 cargo
cargo install fblog

# 或直接下载二进制文件
https://github.com/brocode/fblog/releases

使用示例

假设你的应用输出这样的日志:

{"timestamp": "2026-04-02T15:30:00Z", "level": "INFO", "message": "Server started", "port": 8080}
{"timestamp": "2026-04-02T15:31:12Z", "level": "ERROR", "message": "Database connection failed", "error": "timeout"}

直接查看简直是折磨。但用 fblog 处理:

cat app.log | fblog

输出会变成:

fblog 输出示例

时间戳、日志级别、消息内容被清晰分隔,不同级别用不同颜色标注(INFO 绿色、ERROR 红色等),一眼就能定位问题。

进阶用法

过滤特定字段

# 只显示 ERROR 级别以上的日志
cat app.log | fblog -l ERROR

# 按自定义字段过滤
cat app.log | fblog -f 'service=api'

自定义输出格式

# 指定时间字段名(如果你的日志用不同字段名)
cat app.log | fblog --time-field="@timestamp"

# 显示所有字段(不只是默认的核心字段)
cat app.log | fblog -a

与 Docker/Kubernetes 配合

# 实时查看容器日志
docker logs -f myapp | fblog

# 查看 Kubernetes Pod 日志
kubectl logs -f pod/myapp | fblog

为什么选 fblog?

特性fblog其他工具
体积单个静态二进制文件 (~2MB)通常依赖较多
速度Rust 实现,处理大日志飞快Python/Node 工具相对较慢
配置几乎零配置,开箱即用很多需要写配置文件
兼容性支持任意 JSON 日志格式有些只支持特定格式

同类工具对比

  • jq: 功能强大的 JSON 处理器,但学习曲线陡峭,不适合快速查看日志
  • hl: 另一个 Rust 日志查看器,功能更丰富但也更重(3031 stars)
  • lnav: 支持多种日志格式,但体积较大

如果你只需要一个简单、快速、无依赖的 JSON 日志查看工具,fblog 是最佳选择。

总结

fblog 完美诠释了 Unix 哲学:“做一件事,并把它做好”。它不试图成为全能的日志分析平台,而是专注于解决”JSON 日志可读性”这一个问题,并且解决得非常漂亮。

对于经常需要查看容器日志、微服务日志的开发者来说,把 | fblog 加入你的工作流,能节省大量时间和眼力。


项目链接: https://github.com/brocode/fblog