《不止于 grep:这款“现代化文本筛选器”让日志排查效率提升 10 倍》

80 阅读4分钟

如果你也曾在凌晨 2 点的机房里,被 3 GB 日志文件支配恐惧,这篇文章就是写给你的。
我花了两周用 Swift 搓了一款 macOS 原生文本筛选器,把 90% 的 grep/awk/sed 场景做成了点鼠标就能完成的交互。开源在 GitHub,10k star 了,把踩坑过程与思路分享出来,希望能帮到你。


🌈 先放成果

  • 仓库:gitee.com/opklm1234/m…(顺手点个 ⭐ 不迷路)
  • 下载:Release 已签名,macOS 13+ 开箱即用,体积 3 MB
  • 效果图:

3333.png


🎯 需求缘起

痛点传统命令行我想要的样子
多关键词 OR/ANDegrep 'A|B' 写完还要管道输入 `AB`,点一下 OR
反向过滤grep -v 一层,命令行越来越长右侧“排除框”直接写关键词
高亮颜色终端只有单色,眼花6 组彩色循环高亮,一眼区分
行号定位-n 后还要手动数双击结果行自动跳原文
复用条件history 翻,换电脑就丢一键保存,历史条件云端同步

于是决定自己搓一个 可视化 + 正则 + 大文件流式解析 的桌面工具。


🏗️ 技术选型

模块方案理由
UISwiftUI + Combine原生性能,滚动 1000 万行不卡
文本解析mmap + 行级 Chunk4 GB 文件秒开,内存只占 120 MB
正则引擎NSRegularExpression支持 ICU 语法,与 Perl 兼容
高亮渲染NSAttributedString + NSTextStorage彩色、可点击、可复制
数据持久化NSUserDefaults + CloudKit条件模板多设备同步
拖拽导入NSFilePromiseReceiver支持批量 .log/.txt/.csv

🔍 核心功能拆解

1. 多关键词搜索:一行语法,两种模式

搜索框支持:

  • ERROR|timeout|NullPointer → OR 模式
  • 切换到 AND 模式 → 同时包含三词才命中
  • 括号分组:((ERROR|FATAL) & userId=12345)

输入时实时预检:
正则语法错误立即红框提示,不写废语句

2. 反向过滤:先筛后排除,双漏斗

exclude转存失败,建议直接上传图片文件

业务流程:
① 关键词池 → ② 包含池 → ③ 排除池
= 精准结果,再也不用 grep ... | grep -v ... | grep -v ... 套娃。

3. 彩色高亮 & 双击定位

  • 循环 6 组配色,关键词不同色,肉眼分诊
  • 结果区双击 → 左侧原文自动滚动到对应行并闪蓝
  • 支持 Command + G 连续跳转下一个匹配

4. 条件收藏夹 & 历史

  • 一键保存当前“关键词+排除+模式”组合
  • 支持 CloudKit 同步,公司电脑配置,回家继续用
  • 历史按使用频次排序,越用越懂你

5. 实时统计

底部状态栏:
总行数 12,345,678 | 匹配 1,234 (0.01%) | IP 去重 42 个
复制按钮一点,日报/故障群直接粘贴数字。


🧪 性能基准

测试机:M2 Pro + 16 GB

文件大小行数冷启动关键词高亮内存峰值
128 MB nginx 日志520 k0.8 s1.1 s112 MB
1.2 GB 应用日志4.8 M3.2 s4.5 s310 MB
4.3 GB 混合日志18 M7.1 s9.8 s580 MB

解析算法:两次 mmap 扫描,首次建行索引,二次正则匹配;耗时随核数线性下降,M2 Max 可再快 40%


📈 适用场景清单

场景示例关键词排除噪音
线上故障ERROR|Fatal|OutOfMemoryINFO|DEBUG
接口审计POST /api/pay & status != 200GET /health
性能排查> 3000ms & userId=12345< 200ms
安全溯源Failed password & sshAccepted
数据清洗orderStatus=CANCELTEST

🛠️ 开发踩坑记录

  1. SwiftUI 大文本滚动卡顿
    解决方案:用 NSViewRepresentable 封装 NSTextView,关闭自动换行,行级 Cell 复用,内存立降 70%。

  2. 正则回溯爆炸
    用户输入 (.*)* 导致 CPU 100%?
    解决:预编译正则加 NSRegularExpression.allowsExternalBinaryOperators = true超时 2 s 自动熔断,弹友好提示。

  3. Dark Mode 彩色高亮看不清
    解决:根据 NSAppearance.current 动态降饱和,护眼绿/深蓝交替


🧩 后续 Roadmap

  • 2025 Q4:接入 Loki / Elasticsearch,远端流式日志实时 tail

🎉 结语

命令行永远性感,但效率工具的意义,就是让我们把生命浪费在更美好的事情上,而不是重复敲 grep
如果 LogLens 帮到你,欢迎:

  • Git 点个 ⭐
  • 评论区聊聊你的排障故事
  • 转发给还在日志地狱的小伙伴

Happy Debugging!