📝
Logdy是一个单二进制文件的本地日志查看工具,零依赖零配置。一个管道符把终端输出推送到浏览器WebUI,像用数据库表格一样浏览日志,支持分面过滤、全文搜索、时间线追踪。
原文链接:https://mp.weixin.qq.com/s/DLCY4Lhg9Fqrd-oRiytCEA
Logdy是一个单二进制文件的本地日志查看工具,零依赖零配置。一个管道符把终端输出推送到浏览器WebUI,像用数据库表格一样浏览日志,支持分面过滤、全文搜索、时间线追踪。
Logdy:一个让终端日志飞进浏览器的神器
每天被 tail -f 刷屏折磨?日志量大到根本看不过来?试试 Logdy —— 一个单二进制文件,把任何终端输出实时推送到浏览器 Web UI,像用数据库表格一样浏览你的日志。
🤔 先说痛点
作为一个 Python 开发者,你平时看日志大概率是这样:
1 2
| `tail -f app.log python app.py | grep ERROR`
|
日志量大的时候,终端刷屏飞快,你根本无法:
- 🔍 搜索特定内容
- 🏷️ 过滤某个级别的日志
- ⏪ 回看历史日志
- 📊 对比不同来源的日志
Logdy 的解决方案极简: 加一个管道符,日志就飞进了浏览器。
⚡ 什么是 Logdy?
Logdy 是一个单二进制文件的本地日志查看工具,零依赖、零配置。
把它理解为 jq + tail + less + grep + awk 的合体,但有一个干净的图形界面。
核心优势:
特点
说明
📦 单文件
下载即用,无需 Python 依赖、npm install、Docker
🔒 本地运行
日志不离开你的机器,安全
🔄 实时流式
日志产生后即时显示在浏览器
🧠 智能解析
自动识别 JSON 日志,支持自定义 TypeScript 解析器
🏷️ 分面过滤
类似电商网站筛选器,点击即过滤
🔎 全文搜索
支持语义化搜索语法
⏰ 时间过滤
按时间范围快速定位
🔗 关联追踪
通过 correlation ID 追踪同一请求的日志链
🛠️ 安装(30秒搞定)
方式一:一键脚本(推荐)
1
| `curl https://logdy.dev/install.sh | sh`
|
不想暴露 IP?用静默版本:
1
| `curl https://logdy.dev/install-silent.sh | sh`
|
方式二:Homebrew(macOS)
方式三:手动下载
去 GitHub Release[1] 下载对应平台的二进制文件,重命名为 logdy,加执行权限即可。
macOS 用户注意: 下载后可能被 Gatekeeper 拦截,执行:
1
| `xattr -d com.apple.quarantine /path/to/logdy`
|
🚀 5分钟上手
第一个例子:Python 脚本输出
创建 demo.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| `import json, time, random
levels = ["DEBUG", "INFO", "WARNING", "ERROR"] methods = ["GET", "POST", "PUT", "DELETE"] paths = ["/api/users", "/api/orders", "/api/products"]
for i in range(100): log = { "timestamp": time.strftime("%Y-%m-%dT%H:%M:%S"), "level": random.choice(levels), "method": random.choice(methods), "path": random.choice(paths), "status_code": random.choice([200, 200, 200, 404, 500, 301]), "duration_ms": random.randint(1, 500), "message": f"Request processed, id={i}" } print(json.dumps(log)) time.sleep(0.1)`
|
运行:
1
| `python demo.py | logdy`
|
打开浏览器访问 http://localhost:8080,日志已经在实时流入了!
第二个例子:查看日志文件
1
| `tail -f your_app.log | logdy`
|
第三个例子:没有日志?用 Demo 模式
自动生成随机日志,立即体验所有功能。
🎮 运行模式详解
1️⃣ stdin 模式(最常用)
1 2 3 4 5 6 7 8 9 10
| `# 管道方式 python app.py | logdy
# 直接指定命令 logdy stdin 'python app.py'
# 实际场景 logdy stdin 'uvicorn main:app --reload' # FastAPI logdy stdin 'python manage.py runserver' # Django logdy stdin 'celery -A myapp worker -l info' # Celery`
|
2️⃣ follow 模式(监控文件)
1 2 3 4 5 6 7 8
| `# 监控单个文件 logdy follow app.log
# 同时监控多个文件(日志合并到同一个 UI) logdy follow app.log db.log nginx.log
# 读取已有内容 + 监控新增 logdy follow --full-read app.log`
|
3️⃣ socket + forward 模式(多进程聚合)
同时看多个进程的日志?这是杀手级功能:
1 2 3 4 5 6 7
| `# 终端 1:启动中央接收端 logdy socket 8123 8124 8125
# 终端 2-4:各自转发 python service_a.py | logdy forward 8123 python service_b.py | logdy forward 8124 tail -f /var/log/nginx/access.log | logdy forward 8125`
|
所有日志汇聚到同一个 Web UI,每条消息带有来源端口标记。
4️⃣ 远程日志
1
| `ssh user@server "tail -f /var/log/app.log" | logdy`
|
🖥️ Web UI 功能一览
打开 http://localhost:8080 后,你会看到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| `┌──────────────────────────────────────────────────┐ │ 🔍 搜索栏 [⏸ 暂停] [▶ 跟随] [⏵ 加载] │ ├─────────┬────────────────────────────────────────┤ │ 分面过滤 │ 日志表格(点击行展开详情) │ │ │ │ │ Level │ timestamp | level | method | path │ │ ☑ INFO │ 2024-... | INFO | GET | /api/.. │ │ ☑ ERROR │ 2024-... | ERROR | POST | /api/.. │ │ │ │ │ Method │ │ │ ☑ GET │ │ │ ☐ POST │ │ ├─────────┴────────────────────────────────────────┤ │ 时间过滤:[1分钟] [5分钟] [1小时] [自定义] │ └──────────────────────────────────────────────────┘`
|
关键功能:
- 暂停/跟随/加载 — 三个流控制按钮,暂停日志流后安心查看,随时跳回最新
- 分面过滤 — 左侧自动生成分组筛选器,点击即过滤。不同分组之间是 AND 关系,同组多值是 OR 关系
- 语义搜索 — 内置 Breser 引擎,支持
data.level == "ERROR" and data.status_code > 400
- 日志详情抽屉 — 点击行展开所有字段,JSON 自动格式化高亮
- 右键菜单 — 复制单元格值、复制列名、快速切换过滤
💻 TypeScript 中间件(最强大的功能)
Logdy 的 Web UI 中可以编写 TypeScript 代码来定制日志的解析、过滤、展示。代码运行在浏览器端,不会离开浏览器。
过滤噪音
1 2 3 4 5 6
| `(line: Message): Message | void => { if (line.content.includes('health check')) { return; // 丢弃健康检查日志 } return line; }`
|
脱敏处理
1 2 3 4 5 6 7 8 9 10 11
| `(line: Message): Message | void => { if (line.json_content?.phone) { line.json_content.phone = line.json_content.phone.substring(0, 3) + "****"; } if (line.json_content?.email) { line.json_content.email = line.json_content.email.substring(0, 3) + "***"; } return line; }`
|
解析非 JSON 日志
你的 Python 日志是纯文本格式?写个中间件就能解析成 JSON:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| `(line: Message): Message | void => { const match = line.content.match( /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(\w+)\] (\w+) (\S+) status=(\d+) duration=(\d+)ms$/ ); if (match) { line.json_content = { timestamp: match[1], level: match[2], method: match[3], path: match[4], status: parseInt(match[5]), duration: parseInt(match[6]) }; } return line; }`
|
高亮 ERROR 日志
1 2 3 4 5 6
| `(line: Message): Message | void => { if (line.json_content?.level === 'ERROR') { line.style = { "background": "#ffebee" }; } return line; }`
|
🔧 常用命令速查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| `# 最常用 python app.py | logdy # 监控 Python 脚本 tail -f app.log | logdy # 监控日志文件 logdy follow app.log db.log # 同时监控多文件 logdy demo # Demo 模式
# 自定义端口 + 关闭网络通信 logdy --port=3000 --no-analytics --no-updates
# 同时输出到终端 python app.py | logdy -t
# 设置访问密码(远程访问时) logdy --ui-pass=secret --ui-ip=0.0.0.0
# 日志持久化存储 logdy --append-to-file=archive.jsonl --rotate-file-size=100M
# Docker 容器日志 docker logs -f container_name | logdy
# 远程服务器日志 ssh server "tail -f /var/log/app.log" | logdy`
|
🎯 实战:Python 项目日志最佳实践
推荐使用 python-json-logger 输出 JSON 格式,配合 Logdy 效果最佳:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| `import logging from pythonjsonlogger import jsonlogger
logger = logging.getLogger() handler = logging.StreamHandler() formatter = jsonlogger.JsonFormatter( '%(asctime)s %(levelname)s %(name)s %(message)s' ) handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO)
logger.info("User logged in", extra={ "user_id": 12345, "ip": "192.168.1.100", "path": "/api/auth/login" })`
|
运行 python app.py | logdy,JSON 自动解析,一键生成表格列。
📝 总结
Logdy 是一个面向开发者的本地日志可视化工具,不是 ELK 那样的生产级平台。它的定位是:
- ✅ 日常开发和调试 — 快速查看、搜索、过滤日志
- ✅ 多服务联调 — 多进程日志汇聚到同一个 UI
- ✅ 零配置 — 下载即用,不需要任何部署
- ✅ 安全 — 日志不离开你的机器
一句话: python app.py | logdy,你的日志就从终端黑盒变成了可搜索、可过滤、可回看的数据库表格。
GitHub: https://github.com/logdyhq/logdy-core[2]
官网: https://logdy.dev[3]
在线Demo: https://demo.logdy.dev[4]
引用链接
[1]GitHub Release: https://github.com/logdyhq/logdy-core/releases
[2]https://github.com/logdyhq/logdy-core
[3]https://logdy.dev
[4]https://demo.logdy.dev
💬 本文评论区已开启,但暂无读者留言。
本文转载自微信公众号,如有侵权请联系删除。