Logdy:一个让终端日志飞进浏览器的神器

lxiol
📝
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 的解决方案极简: 加一个管道符,日志就飞进了浏览器。

1
`python app.py | 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)

1
`brew install logdy`

方式三:手动下载

去 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
`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


💬 本文评论区已开启,但暂无读者留言。

本文转载自微信公众号,如有侵权请联系删除。

  • 标题: Logdy:一个让终端日志飞进浏览器的神器
  • 作者: lxiol
  • 创建于 : 2026-04-29 20:26:00
  • 更新于 : 2026-05-12 16:07:03
  • 链接: https://blog.lxiol.cn/2026/04/29/Logdy一个让终端日志飞进浏览器的神器/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。