log-insight-tui

Crates.iolog-insight-tui
lib.rslog-insight-tui
version0.2.0
created_at2026-01-09 05:52:27.475739+00
updated_at2026-01-14 01:54:28.033342+00
descriptionA powerful TUI log analyzer with smart visualization, live tailing, and AI integration.
homepage
repositoryhttps://github.com/lliusshijjie/log_analysis
max_upload_size
id2031638
size539,401
liusj (lliusshijjie)

documentation

README

LogInsight 日志分析器总结文档

1. 环境准备

  • 操作系统: Windows 11 (推荐使用 Windows Terminal 以获得最佳显示效果)
  • 开发工具: Rust 编译器 (rustc/cargo 1.75+)
  • 系统组件: 需要访问系统剪贴板权限 (用于 arboard 库)

2. 编译与运行

在项目根目录下使用 PowerShell 执行:

# 编译项目
cargo build --release

# 运行 (单文件)
cargo run -- "service.log"

# 运行 (多文件 - 通配符)
cargo run -- logs/*.log

# 运行 (多文件 - 显式列表)
cargo run -- file1.log file2.log file3.log

3. 核心功能特性

  • 智能转码: 自动识别并转换 GB18030 编码(中文),并对日志内嵌的 UTF-8 JSON 字符串进行二次解码修复。
  • 多行合并: 自动识别跨行打印的 JSON 结构,并将其还原为单条结构化记录。
  • 原始行号: 在列表最左侧展示原始日志文件中的行号(Ln),方便与原始文件对照。
  • 快速跳转: 支持通过行号直接跳转,支持顶部/底部快速直达。
  • 实时追踪 (Live Tailing): 支持类似 tail -f 的实时监控功能。当日志文件追加内容时,程序会自动检测并增量加载新行。
  • 噪声折叠: 自动识别并合并连续的 USB 轮询、线程清理及完全重复的日志行,大幅提升阅读效率。
  • 高级搜索 (Advanced Search):
    • 复合过滤: Shift+S 打开面板,支持时间范围、内容正则、来源文件、多级别勾选组合过滤。
    • 相对时间: 时间字段支持 -1h (1小时前)、-30m (30分钟前)、-2d (2天前) 等自然语言输入。
  • 性能分析:
    • Delta Time: 自动计算同线程相邻日志的时间差。
    • 卡顿高亮: 耗时 >100ms 显示黄色 [+100ms],>1s 显示红色 [SLOW]
  • 可视化统计 (Smart Dashboard):
    • 系统健康度 (Health Gauge): 顶部绿色仪表盘实时显示系统健康评分 (0-100),基于错误和警告密度自动计算。
    • 错误脉冲 (Error Pulse): 顶部迷你图展示最近的错误发生频率,快速识别异常波动。
    • 源分布图 (Source Distribution): 彩色饼状样式直观展示日志来源文件 Top 5 分布。
    • 趋势直方图: 底部直方图实时展示每分钟/每小时日志生成频率及错误趋势。
      • 统计指标: 顶部实时显示 总计日志数峰值点 (Peak) 信息。
      • 预警颜色: 🟥红色 >500条 | 🟧橙色 >250条 | 🟦青色 正常。
  • 错误滚动条 (Mini-map): 右侧滚动条以红色标记显示 Error 日志的相对位置,快速定位问题区域。
  • 多轮 AI 聊天 (AI Chat Interface):
    • F3 专用视图: 提供完整的聊天界面,支持多轮对话。
    • 上下文挂载: 可以在日志视图中按 p 将特定日志“挂载”到聊天上下文中,AI 会针对这些日志进行深度分析。
    • 实时反馈: 聊天历史自动滚动,支持 AI 思考状态动画显示。
    • 上下文面板: 右侧实时展示已挂载的日志详情,支持自动换行显示完整内容。
  • 持久化管理 (History & Search Templates):
    • 命令历史 (F4): 记录搜索、跳转、AI 分析历史,支持选中后按 Enter 一键重执行。
    • 搜索模板: 在高级搜索面板中通过 Ctrl+S 命名保存、Ctrl+L 快速加载常用组合。
    • 持久化存储: 数据自动保存至 ~/.loginsight/ 下的 history.jsontemplates.json

4. 交互操作快捷键

按键 类别 功能描述
/ 导航 向上/向下选择
/ 导航 向上/向下翻页 (可配置 page_size)
k / j 导航 (Vim 风格) 向上/向下选择
g / G 导航 跳转到顶部 / 跳转到底部
: 导航 跳转到指定行号 (输入行号后按 Enter)
F1 视图 切换到日志列表视图
F2 视图 切换到仪表盘视图 (显示统计、错误趋势、热点分析)
F3 视图 切换到 AI 聊天视图 (支持多轮对话和上下文分析)
F4 视图 切换到历史记录视图 (查看/重新执行历史命令)
/ 图表 (仪表盘视图) 滚动错误趋势图查看历史数据
Tab 焦点 切换文件列表/日志列表焦点
p 聊天 (日志视图) 将选中日志挂载到 AI Chat 上下文
i 聊天 (Chat 视图) 进入消息输入模式 (Esc退出,Enter发送)
c 聊天 (Chat 视图) 清空已挂载的日志上下文
Shift+C 聊天 (Chat 视图) 清空所有聊天历史
Enter 历史 (F4 视图) 重新执行选中的历史命令
Delete / d 历史 (F4 视图) 删除选中的历史记录
c 历史 (F4 视图) 清空所有历史记录
Space 文件 (文件列表) 切换文件启用状态
Enter 文件 (文件列表) Solo模式,只显示当前文件
/ 搜索 进入快捷正则表达式搜索 (Esc退出,Enter应用)
Shift+S 搜索 打开高级搜索面板 (支持时间范围、内容、正则、来源、级别组合)
Ctrl+S 模板 (搜索面板内) 保存当前筛选条件为模板
Ctrl+L 模板 (搜索面板内) 从列表加载已保存的搜索模板
!term 搜索 反向搜索,排除匹配项
n / N 搜索 跳转到下一个/上一个搜索匹配项
t 过滤 开启/关闭当前选中行的线程 (TID) 过滤
1/2/3/4 过滤 切换 Info/Warn/Error/Debug 级别显示 (标题栏显示 [●I ●W ●E ●D] 状态)
m 书签 切换当前行书签状态 (标记为紫色 🔖)
b / B 书签 跳转到下一个/上一个书签位置
f 追踪 切换实时追踪模式 (开启后标题显示绿色 [LIVE])
a AI诊断 调用 AI 分析当前选中的日志上下文 (需配合 Ollama)
c / y 导出 复制完整日志行 / 复制解析后的 JSON 内容
e 导出 导出当前过滤后的日志为 CSV 格式
E (Shift+E) 导出 导出当前过滤后的日志为 JSON 格式
r 导出 导出统计报告(错误汇总、性能指标)
R (Shift+R) 导出 导出 AI 分析结果(聊天历史)
? 帮助 显示快捷键帮助弹窗
Esc 状态 关闭弹窗 / 清除过滤 / 取消输入
q 系统 退出程序

5. AI 诊断与聊天

  • 依赖: 需要本地运行 Ollama 服务 (ollama serve)
  • 模型: 默认使用 qwen2.5-coder:7b (建议 16GB 内存及以上使用)
  • 单行快速诊断: 选中日志行后按 a 键,程序会提取该行前后上下文发送给 AI。
  • 多轮 Chat 模式:
    1. F1 视图选中关键日志按 p 键挂载。
    2. F3 进入聊天界面。
    3. i 输入问题(如:“这几条日志显示了什么异常?”),AI 将结合挂载的日志进行回答。
    4. 聊天支持上下文记忆,可进行连续追问。

6. 配置系统

程序首次运行时会在当前目录生成 log_config.toml 配置文件,支持自定义:

  • log_pattern: 日志解析正则表达式
  • fold_rules: 折叠规则(可配置匹配类型和模式)
  • ignore_patterns: 预解析过滤正则(匹配的日志行不会被加载)
  • theme: 慢日志阈值、语法高亮颜色和翻页行数 (page_size,默认20)

语法高亮

日志内容会自动高亮显示:

  • IP地址 (青色)
  • URL链接 (蓝色)
  • 文件路径 (黄色)

7. 常见问题排查

  • 乱码问题: 若在终端看到乱码,请确保使用 Windows Terminal 或将代码页设为 UTF-8 (chcp 65001)。
  • 按键无效: 禁止在 Cursor 或 VS Code 的集成终端运行,集成终端会拦截大量功能键。请务必在独立终端中运行。
  • 文件占用: 若编译报错 拒绝访问 (os error 5),表示旧版本程序仍在运行,请先关闭正在运行的 TUI 实例。
  • 跳转失败: 跳转功能使用的是“原始行号”,如果日志经过过滤,跳转会定位到最接近该行号的可视日志。
Commit count: 28

cargo fmt