必须用^.exception.$等带锚点的正则才能匹配整行,否则仅高亮单词;跨文件搜索需明确填写where路径并勾选.*启用正则,多行堆栈提取须开启match newlines。

怎么用 ^.*Exception.*$ 提取完整异常行
不加 ^ 和 $,Exception 只会高亮单词本身,不是整行;复制出来全是碎片。必须写成 ^.*Exception.*$ 才能确保匹配整行,后续才能用 Ctrl + L(Windows/Linux)或 Cmd + L(macOS)一键选中全部匹配行。
- 日志里常见变体:也得覆盖
^.*ERROR.*$、^.*Traceback.*$,可合并为^.*(Exception|ERROR|Traceback).*\$ - 区分大小写敏感时,勾选查找面板里的 “Aa” 图标;生产日志常全大写,
ERROR比error更可靠 - 如果日志带时间戳前缀(如
[2026-06-30 14:20:01]),正则仍有效——.*自动吞掉前面内容
Find in Files 跨文件提取异常时,Where 栏不能留空
Ctrl + Shift + F 的 Where 栏留空 = 只搜当前文件,不是整个项目。很多人以为点了就扫全盘,结果漏掉关键日志。
- 填
./logs/**/*.log或logs/明确限定路径,避免拖慢响应甚至卡死 - 务必勾选右下角
.*图标启用正则,否则^.*Exception.*$当字面量处理,完全不生效 - 搜索结果页右键 →
Copy All,粘贴后每行带前缀如app.log:456:java.lang.NullPointerException;后续用Ctrl + H替换^[^:]+:\d+:\s*为空,得纯文本
捕获组提取堆栈关键字段,替换时必须用 $1 不是 \1
想从 Caused by: java.lang.IllegalArgumentException: Invalid ID 中只取异常类名,得用捕获组,但替换语法容易错。
- 查找:
Caused by:\s+([^\s:]+)——()包住目标部分 - 替换栏填
$1,不是\1;填\1会原样输出字符串\1 - 若要提取多段(如类名 + 消息),用
Caused by:\s+([^\s:]+):\s+(.*),替换为$1\t$2制表分隔 - 跨行堆栈(含
at com.example.Xxx.method(Xxx.java:123))需勾选Match newlines或在正则开头加(?s)
多行异常块去重:用 ^(.*Exception.*)$(\n^.*?$)* 匹配完整块
单行匹配会把同一个异常的多行堆栈拆开,导致重复分析。真正要的是“一个异常起始行 + 后续所有缩进/空行/堆栈行”的原子块。
- 正则:
^(.*Exception.*)$(\n^.*?$)*—— 第一组捕获起始行,第二组非贪婪捕获后续任意行 - 必须勾选
Match newlines,否则\n不被识别 - 匹配后
Ctrl + Enter(Windows/Linux)选中全部块,再Ctrl + Shift + K删除重复块,或Ctrl + C单独保存每个异常实例 - 注意:该正则对无换行的单行异常也兼容,但若日志用空行分隔异常块,可改用
^(.*Exception.*)$(\n(?=.*Exception)|\n)+更精准
Match newlines 开关和 Where 路径限定——没开前者,跨行匹配永远失败;没填后者,Find in Files 形同虚设。











