You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch:在Item Reader中过滤日志文件数据

批处理过滤含 [{...}]结构的日志行解决方案

嘿,我刚搞定过类似的批处理日志过滤需求,给你分享两种靠谱的方案,看哪种更贴合你的实际场景:

方案1:精确匹配字面量[{}](含前后空格)

如果你要找的是精确包含[{}]这个固定字符串的行(比如日志里真的有空格+[{}]+空格的内容),直接用findstr的/C参数就行——这个参数会把后面的内容当作纯字面量,不用管那些正则特殊字符:

@echo off
setlocal enabledelayedexpansion

:: 替换成你要处理的日志文件格式,比如*.log、*.txt,或者指定具体文件
for %%f in (*.log) do (
    echo 正在处理: %%f
    :: 过滤出包含" [{}] "的行,输出到原文件名+_filtered.log
    findstr /C:" [{}] " "%%f" > "%%~nf_filtered.log"
    echo 处理完成,结果文件:%%~nf_filtered.log
)

endlocal
pause

方案2:匹配含 [{...}]结构的行(方括号内有大括号)

看你的示例日志行是15:31:44,437 INFO <NioProcessor-32> [{2704=5, 604=1, {0=023pdu88mW00007z}],其实是要保留方括号里包含大括号的行,而不是精确匹配[{}]。这种情况用findstr的正则模式更灵活,注意要给特殊字符加转义:

@echo off
setlocal enabledelayedexpansion

for %%f in (*.log) do (
    echo 正在处理: %%f
    :: 正则匹配:空格+[+任意非]字符+{+任意非}字符+}+任意字符+]+空格
    findstr /R " \[[^]]*\{[^}]*\}.*\] " "%%f" > "%%~nf_filtered.log"
    echo 处理完成,结果文件:%%~nf_filtered.log
)

endlocal
pause

常见坑说明

  • 为什么之前可能失败?因为[、{这些是findstr的正则元字符,直接写会被当作正则语法解析,而不是字面量。用/C参数或者转义后才能正确匹配。
  • 如果日志是UTF-8编码带BOM,findstr可能识别有问题,你可以先把日志转成ANSI编码再处理(比如用记事本另存为选ANSI)。

内容的提问来源于stack exchange,提问作者patoCapongo93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:20:29