IntelliJ使用Grep Console筛选完整多行JSON日志的方法
Grep Console 匹配完整多行JSON日志配置方法
问题原因
Grep Console 默认采用单行匹配逻辑,之前使用的.*info.*规则只会命中包含"level" : "INFO"的单一行内容,不会自动关联同一JSON结构下的其他行,因此无法拿到完整日志条目。
配置步骤
方案1:块边界配置(无需复杂正则,推荐)
- 打开IntelliJ中Grep Console的配置面板,找到「Block detection(块检测)」配置项
- 配置块起始匹配规则:
^\{(匹配行首的左大括号,即单条JSON日志的开始位置) - 配置块结束匹配规则:
^\}(匹配行首的右大括号,即单条JSON日志的结束位置) - 保存配置后,原本使用的
.*"level"\s*:\s*"INFO".*匹配规则就会在整个JSON块范围内检索,命中后会直接返回完整的JSON日志条目,不会只返回单行。
方案2:多行正则匹配
如果不想改全局块检测规则,可以直接给对应过滤规则开启多行模式,写匹配完整块的正则:
- 找到正在使用的INFO级过滤规则,勾选规则配置里的*Multiline(多行匹配)*选项
- 将匹配正则替换为以下内容:
^\{[^{}]*"level"\s*:\s*"INFO"[\s\S]*?^\}
正则逻辑说明:
- 从行首的左大括号(JSON起始位)开始匹配
- 校验块内包含level字段值为INFO的内容,兼容键值对前后的任意空格
- 非贪婪匹配块内所有内容(包含换行),直到命中行首的右大括号(JSON结束位)即停止,避免跨日志块匹配
注意事项
- 如果需要筛选ERROR、WARN等其他级别日志,只需把上述规则里的
INFO替换为对应级别值即可 - 如果JSON日志存在嵌套大括号结构(如message字段内包含JSON片段),可以根据实际日志格式调整块结束标记的匹配规则,避免匹配截断
- 配置完成后确认规则输出选项为输出完整匹配内容,不要勾选「仅输出命中行」选项。
内容的提问来源于stack exchange,提问作者crimson589
相关产品推荐
相关产品推荐

