Skip to content

About

大日志查看工具

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

Open Log Viewer

大日志文件,在 VSCode 里流畅查看、可搜、可标注、可一键排查

Version License VSCode Stars Issues

安装 · 使用方法 · 命令面板 · 问题反馈

目录
  1. 关于项目
  2. 功能特性
  3. 界面预览
  4. 快速开始
  5. 使用方法
  6. 支持的日志格式
  7. 配置
  8. 命令面板
  9. 主题
  10. 已知限制
  11. 本地开发
  12. 贡献
  13. 许可证
  14. 作者

关于项目

排查线上问题时要翻的服务器日志,经常几百 MB 起步。用 VSCode 直接打开,轻则卡半天,重则直接拒绝。这个扩展给这类文件配了一个专用查看器:打开时整块载入并显示真实进度,载入完成后搜索、过滤、翻页都在内存里即时完成,不再碰磁盘。

服务器日志通常会按大小或日期自动分块,一块一块地看正好是排查的自然节奏。这个查看器就是按「单块日志」设计的:单块几百 MB 以内体验最好,翻页、搜索都是即时的;文件越大打开越慢、内存占用越高,还没分块的超大文件建议先拆分再打开。

能打开之后,排查日志要用的工具它也配齐了:多关键词与正则搜索、线程和级别过滤、时间线导航、书签与注释,还有把固定排查流程存成一键重跑的排查模板。这类日志通常是从服务器单独下载的文件,不在任何项目工作区里,所以标注数据保存在用户级存储、模板分享走剪贴板或 JSON 文件,全程不依赖工作区。

(回到顶部)

功能特性

大文件加载

  • 打开时整块载入:磁盘读取全程流式,进度按真实字节数推进(百分比、已读行数),不是转圈假动画
  • 载入后分页浏览,每页只渲染当前页的行(50 到 1000 行可调),百万行日志翻页也不卡
  • 「跳转到行 / 跳转到时间」在磁盘上流式定位,只读取目标行附近 ±500 行上下文,不需要重新载入整个文件
  • 定位是「单块日志」查看器:单块几百 MB 以内体验最好;整块载入意味着文件越大打开越慢、内存占用越高,未分块的超大文件建议先拆分
  • 多个日志同时打开,各占一个独立面板,书签、注释、搜索状态互不干扰

搜索与过滤

  • 多关键词用空格分隔就是 AND 匹配,比如搜 error timeout,两个词同时出现的行才是结果
  • 勾「正则」切换正则模式,勾「当前页」只在当前显示的页内快速定位
  • 全局搜索自动记入历史,重新聚焦搜索框或修改输入内容就能一键重搜(上限 50 条,按文件隔离);高级搜索的关键词输入框共用同一份历史
  • 高级搜索是一个查询构建器:条件一行一个,行间「且/或」芯片切换整体逻辑,底部实时预览这次查询会做什么
  • 搜索、线程名、类名、方法名、日志级别、时间范围全部叠加生效,「取消筛选」一键清空
  • 连续重复的日志自动折叠(忽略时间戳差异),折叠徽标显示当前搜索的命中数

标注与导航

  • 双击日志行加书签,右键可以给书签起名;书签行整行主题色高亮,书签列表里可一键导出书签日志
  • 右键日志行添加注释,注释列表集中管理
  • 内置 ERROR / WARN / INFO / DEBUG、时间戳、线程名高亮规则,也支持自定义正则规则
  • 时间线导航把全文件按时间采样画成分布图,点哪跳哪,当前浏览位置高亮
  • 统计面板给出总行数、各级别数量和时间范围

排查模板

  • 固定排查流程存成模板,一键自动重跑,换个订单号或 traceId 就能复用
  • 四种动作自由编排:查询日志、筛选、打书签、加注释,动作间自动传上下文(比如从命中行提取线程名接着筛)
  • 命中多条时可配置「让我选择 / 保留全部 / 自动选第一条」,零命中时可配置终止或跳过继续
  • 可视化与 JSON 双形式编辑,通过剪贴板或文件导入导出,方便分享给同事
  • 模板可按服务分组,列表左侧按组切换,不同服务的模板不再混在一起

界面与主题

  • 级别配色、线程/类/方法标签、折叠徽标都跟随主题变量
  • 四套主题:默认(跟随 VSCode)、NEON.CYBER、AURORA.GLASS、HOLO.PRISM,切换立即生效,不丢搜索状态和滚动位置

(回到顶部)

界面预览

主界面:时间线导航、级别过滤、搜索栏和书签行高亮在同一屏。

主界面

书签和注释都从行上的右键菜单发起,列表集中管理:

书签管理 注释管理
书签管理与导出 注释管理

高亮规则和排查模板编辑器:

自定义高亮规则 排查模板编辑器
自定义高亮规则 排查模板编辑器

(回到顶部)

快速开始

环境要求

  • VSCode 1.75 或更高版本

安装

在扩展面板搜索「Open Log Viewer」安装,也可以直接执行:

code --install-extension wake.big-log-viewer

想从源码自己打包:

git clone https://github.com/uwakeme/large_log_check.git
cd large_log_check
npm install
npm run package

打包会在项目根目录生成一个 .vsix 文件,在扩展面板右上角「⋯ → 从 VSIX 安装」里选择它即可。

第一次使用

在资源管理器里右键任意 .log / .txt 文件,选择「打开大日志文件」。进度条走完就是完整日志,可以直接搜了。

(回到顶部)

使用方法

打开日志文件

三种方式:

  1. 资源管理器中右键 .log / .txt 文件,选「打开大日志文件」
  2. 打开文件后,点编辑器右上角的查看器图标
  3. 命令面板(Ctrl+Shift+P)执行「Open Log Viewer: 打开大日志文件」

每个文件在独立面板中打开,标题栏显示文件名;书签、注释、高亮规则、搜索状态都按面板隔离,关闭面板即释放资源。

搜索与过滤日志

搜索框支持多关键词,空格分隔就是 AND 匹配;停止输入约 0.4 秒后自动触发(防抖时间可配)。勾选「正则」切换正则模式,勾选「当前页」只在当前显示的页内定位。

Tip

想找报错但日志里到处都是 timeout,直接搜 error timeout,只有两个词都出现的行才是结果。

执行过的全局搜索会自动记入历史(上限 50 条,按文件隔离,仅当前会话有效)。重新聚焦搜索框或修改输入内容即弹出历史下拉,点击条目会还原关键词和正则开关并重新搜索,也可以悬停单删或一键清空。高级搜索里的「关键词」输入框也共用这份历史——在任一处实际搜过的关键词都会出现在另一处的下拉里。

「高级搜索」是一个查询构建器:每个条件独占一行(字段 → 匹配方式 → 值),支持关键词、线程名、类名、方法名、日志级别和时间范围;条件行之间的「且/或」芯片决定整体逻辑,底部的查询预览用一句话实时描述当前查询。关闭弹窗不丢已填的条件,重开接着改,「清空」才重置。

所有过滤条件(搜索、线程名、类名、方法名、级别、时间范围)叠加生效,不会互相覆盖;「取消筛选」一键清空,恢复完整视图。勾选「折叠重复日志」可以把连续重复的行合并成一组(比较时忽略时间戳差异),点击折叠组展开明细,徽标会显示当前搜索的命中数。搜索/筛选/取消筛选后分页会按结果重新计算(回到第 1 页)——折叠模式下不会保留旧页数,避免出现「显示 N 页但部分页空白」的错位。点击行首「跳转到完整日志」会同时退出折叠模式——折叠语境下的页码语义对完整日志无意义。

支持自动识别的时间格式
  • 2024-01-01 12:00:00 / 2024-01-01 12:00:00.123
  • 2024/01/01 12:00:00 / 2024/01/01 12:00:00.123
  • [2024-01-01 12:00:00] / [2024-01-01 12:00:00.123]
  • 01-01-2024 12:00:00
  • 2024-01-01T12:00:00 / 2024-01-01T12:00:00.123Z(ISO 8601)

日志里没有标准时间戳时,时间范围过滤、时间线和按时间删除功能不可用。

书签、注释与高亮规则

双击日志行快速添加书签,右键菜单可以给书签起名(比如「第一次执行」),留空则默认叫「行 N」。书签行整行高亮:底色加深、行首色条与级别色条并排显示,配色跟随主题自动适配。书签管理弹窗里点「导出书签日志」,所有带书签的行会按行号排序导出到新文件。

右键日志行添加注释,注释列表里可以编辑和删除,方便团队协作分析。

高亮规则内置了 ERROR / WARN / INFO / DEBUG、时间戳、线程名几条,全部用正则实现;在「高级搜索」旁的「高亮规则」入口里可以添加自己的规则,控制匹配模式和颜色。

「定位」按钮输入行号直接跳转;向下滚动后右下角会出现「回到顶部」按钮,按 Home 键回到第一页。

运行排查模板

排查模板把固定排查流程存成可复用的模板:模板 = 运行参数 + 自上而下执行的动作序列。入口在工具栏「排查模板」按钮。

运行时在模板列表点「运行」,填写模板里 ${参数} 占位对应的值(比如业务单号),点「开始执行」。留空没填的参数按空处理(不会把 ${参数名} 字样带进动作里);没填参数导致关键词为空时,走该动作配置的「0 条命中」策略。动作会依次自动执行,查到哪、筛到哪就自动定位到哪;执行中可随时停止,结束后给出摘要(书签数、注释数、筛选线程、定位行)。

动作 做什么
查询日志 按关键词搜索,支持 ${参数} 占位;命中多条时可配置「让我选择 / 保留全部 / 自动选第一条」,零命中时可配置终止或跳过继续
筛选 按线程名、类名、方法名、级别、时间范围过滤;值可以是固定内容、${参数},或 lastHit(从上一步命中的日志行自动提取线程名)
打书签 对查询命中结果或当前视图的全部日志批量打书签
加注释 同打书签,批量添加注释内容

查询动作还有两个可选约束:「从上一步命中之后开始查」和「仅同线程日志」,组合起来可以表达「找上一条日志之后的下一处匹配」这类链式定位。

新建模板在可视化编辑器里编排动作即可,也可以切到 JSON 模式直接编辑,两种形式是同一份数据。定义好运行参数后,编辑动作时点一下参数芯片的 ${参数名} 就能把它插入到输入框光标处。模板通过剪贴板或 JSON 文件导入导出(按 id 去重合并;导入只认本扩展导出的格式,其他内容会直接报错),适合把排查套路分享给同事。

模板可以按服务分组:编辑器「模板信息」里填一个「分组」名(比如 支付服务),模板列表左侧就能按组切换查看;输入时会提示已有的分组,同名自动归到一组,留空归入「未分组」。导入的模板会带着自己的分组名,某组的模板删光后该组自动消失。

Note

模板需要日志完全加载后才能运行。模板数据保存在 webview 本地存储中,与当前机器的用户配置绑定,换机器请用导出/导入迁移。

编辑模板时点标题栏的「─」可以收起编辑器、边看日志边操作;复制日志内容后编辑器会自动弹回,直接粘贴就行。

时间线、统计与导出

时间线导航把整个文件按时间采样画成分布图,点击某个时间块直接跳到对应位置;翻页、跳转时高亮跟着走,随时知道自己在哪个时间段。采样密度可在设置里调(默认 200 个采样点)。

「统计」按钮给出总行数、各级别日志数量和时间范围。

「导出」把过滤/搜索后的结果导出到新文件;书签日志在书签管理弹窗里导出。

日志裁剪

Caution

裁剪和删除会直接修改原文件,且不可恢复。操作前务必备份重要日志。

「日志裁剪」支持四种方式:删除指定时间之前/之后的日志、删除指定行号之前/之后的日志、只保留时间范围内的日志、只保留行号范围内的日志。命令面板里的「按时间删除日志」「按行数删除日志」效果相同。

(回到顶部)

支持的日志格式

查看器本身是通用文本查看器,任何 .log / .txt 都能打开、搜索、加书签;在此基础上,每行会自动识别时间戳和日志级别(归一化为 ERROR / WARN / INFO / DEBUG 四档,FATAL、SEVERE 计入 ERROR,TRACE、VERBOSE 计入 DEBUG)。下表是常见日志组件默认/典型输出的实测结果:

日志组件 时间戳 级别
Logback / Log4j / Log4j2 / SLF4J、Spring Boot 默认格式 ✓ ✓
log4net / NLog(.NET) ✓ ✓
Python logging(%(asctime)s 格式)、Gunicorn ✓ ✓
logrus、zap 控制台格式(Go) ✓ ✓
Rails、Laravel / Monolog、winston 文本格式 ✓ ✓
Go 标准库 log、IIS W3C、syslog RFC5424 ✓ —
Docker json-file、bunyan(JSON 内含 ISO 时间字段) ✓ —
Tomcat catalina(JUL)、JBoss / WildFly 默认 pattern — ✓
Serilog Console 默认([12:00:00 INF])、Apache error log — ✓
Python logging 默认格式、uvicorn(INFO: 前缀) — ✓
nginx / Apache access log(01/Jan/2024 英文月份日期) — —
syslog RFC3164 传统格式、uWSGI — —
pino 等 epoch 毫秒时间戳 + 数字级别的 JSON 日志 — —

几点说明:

  • 识别不到时间戳只影响时间范围过滤、时间线导航、按时间裁剪这三类功能,打开、搜索、级别过滤、书签、注释全部照常可用;堆栈续行等没有时间戳的行也照常显示。
  • 自动识别的时间戳格式见「打开日志文件」一节;日期里带英文月份(01/Jan/2024、Jan 01, 2024)或完全没有日期的格式目前识别不了。
  • 级别简写 E / W / I / D、ERR / WRN / INF / DBG / TRC 默认就能识别;如果你们的日志用了别的缩写(比如 EXC、CRIT),可以在设置里配级别别名。

(回到顶部)

配置

配置项 默认值 说明
big-log-viewer.theme default 视觉主题,可选 default / neon / aurora / holo
big-log-viewer.search.debounceMs 400 搜索框停止输入后自动触发搜索的延迟(毫秒)
big-log-viewer.collapse.minRepeatCount 2 至少重复多少次的行才会被折叠
big-log-viewer.timeline.samplePoints 200 时间线采样点数量(20–1000),越大越精细但计算越慢
big-log-viewer.level.aliases 见下 日志级别别名映射。标准级别词(ERROR/FATAL/SEVERE/WARN/WARNING/INFO/INFORMATION/DEBUG/TRACE/VERBOSE)始终参与识别,此表只定义额外别名。单字符别名仅在「时间戳之后」与「[方括号]」两种形态参与识别,不参与裸词识别。配置变更需重新打开或刷新日志文件后生效

(回到顶部)

命令面板

命令 说明
Open Log Viewer: 打开大日志文件 选择一个日志文件在查看器中打开
Open Log Viewer: 高级搜索 打开查询构建器
Open Log Viewer: 排查模板 打开排查模板管理
Open Log Viewer: 书签管理 打开书签列表
Open Log Viewer: 注释管理 打开注释列表
Open Log Viewer: 跳转到行号 输入行号直接跳转
Open Log Viewer: 显示日志统计 查看总行数、级别分布、时间范围
Open Log Viewer: 刷新日志文件 重新读取文件(文件被外部更新后用)
Open Log Viewer: 按时间删除日志 直接修改原文件,慎用
Open Log Viewer: 按行数删除日志 直接修改原文件,慎用

(回到顶部)

主题

四套主题在「⋯ 更多 → 设置」面板里切换,立即生效,不丢搜索状态和滚动位置;选择会写入 VSCode 用户配置,跨工作区保持一致。

主题 风格
默认(跟随 VSCode) 跟随当前编辑器主题,适合日常使用
NEON.CYBER 纯黑底、霓虹青/品红/琥珀、扫描线与 CRT 暗角,夜间值守很搭
AURORA.GLASS 深蓝紫渐变、极光动效、毛玻璃,适合投屏演示
HOLO.PRISM 炭灰底、全息渐变描边,仪表盘质感

也可以写在 settings.json 里:

{
  "big-log-viewer.theme": "neon"
}

(回到顶部)

已知限制

  • 整个文件打开时一次性载入内存,文件越大打开越慢、占用越高;建议按分块打开单块几百 MB 以内的日志,未分块的超大文件先拆分
  • 行数达到千万级时,输入搜索关键词后界面会有几秒停顿,等过滤跑完即恢复
  • 日志里没有标准时间戳时,时间范围过滤、时间线、按时间删除都不可用
  • 折叠重复日志时总页数在后台异步计算,首次切换可能要等一下
  • 搜索历史仅当前会话有效,关闭查看器即清空;排查模板跨会话保留,但绑定当前机器的用户配置

(回到顶部)

本地开发

环境要求:Node.js 18+、VSCode 1.75+。

命令 作用
npm install 安装依赖
npm run watch 监听编译,配合 F5 调试
npm run compile 编译到 out/
npm run lint 对 src/ 跑 ESLint
npm test 编译并运行 node:test 单元测试
npm run package 打包生成 .vsix

调试方式:VSCode 打开本项目,按 F5 启动扩展开发主机,在新窗口里打开一个大 .log 文件验证。watch 会自动编译,改完代码手动重载窗口即可。

项目结构
large_log_check/
├── src/
│   ├── extension.ts        # 入口:命令注册与分发
│   ├── logViewerPanel.ts   # WebView 面板生命周期与消息桥接(每文件单例)
│   ├── logProcessor.ts     # 流式读写、统计、时间线采样、删除/裁剪
│   ├── logParser.ts        # 纯函数解析:时间戳/级别/类名/方法名/线程名
│   └── webview.html        # WebView HTML 骨架
├── media/
│   ├── webview.js          # WebView 前端逻辑:搜索、过滤、分页渲染、书签
│   ├── webview.css         # 默认主题样式
│   ├── themes.css          # NEON.CYBER / AURORA.GLASS / HOLO.PRISM 覆盖层
│   ├── investigationTemplates.js  # 排查模板:编辑器与流水线引擎
│   └── searchHistory.js    # 搜索历史
├── test/                   # node:test 单元测试
├── docs/                   # 功能设计文档
└── images/                 # README 配图

(回到顶部)

贡献

欢迎提 Issue 和 PR。仓库约定:新功能的 PR 要在同一个提交里更新 README.md 和 CHANGELOG.md,未发布的条目放在 CHANGELOG 顶部的 ## [Unreleased] 下。

(回到顶部)

许可证

MIT © @uwakeme

(回到顶部)

作者

wake — GitHub @uwakeme

如果这个扩展帮你省下了翻日志的时间,去 Marketplace 页面留个评价,或者给仓库点个 Star。


About

大日志查看工具

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages