如何在Linux中筛选特定REQ ID的持续ERROR日志记录
筛选持续处于ERROR状态的请求日志行
需求:从日志中筛选出REQ ID反复处于ERROR状态的ERROR日志行——即某个REQ ID的所有日志记录均为ERROR,无后续非ERROR状态(如INFO)的记录,按单日持续报错排查这类请求。
日志示例
yyyy-mm-dd [INFO] REQ1 Context 1 yyyy-mm-dd [ERROR] REQ2 Context 2 yyyy-mm-dd [ERROR] REQ3 Context 3 yyyy-mm-dd [INFO] REQ1 Context 4 yyyy-mm-dd [INFO] REQ2 Context 5 yyyy-mm-dd [ERROR] REQ3 Context 6
预期输出
yyyy-mm-dd [ERROR] REQ3 Context 3 yyyy-mm-dd [ERROR] REQ3 Context 6
原因说明
- REQ3的所有日志均为ERROR,无INFO状态记录,属于持续报错的请求
- REQ2虽有ERROR记录,但后续出现INFO状态,说明请求已恢复,因此排除
实现方法(Shell命令)
可以用awk命令一次性完成筛选,无需临时文件:
awk ' /\[INFO\]/ {info_reqs[$3] = 1} /\[ERROR\]/ {error_lines[$0] = $3} END { for (line in error_lines) { req = error_lines[line] if (!info_reqs[req]) { print line } } } ' 你的日志文件名.log
命令逻辑
- 遍历日志时,将出现过INFO状态的REQ ID存入
info_reqs数组标记 - 同时将所有ERROR日志行及其对应的REQ ID存入
error_lines数组 - 最后遍历所有ERROR行,仅输出REQ ID未在
info_reqs中出现过的记录——也就是从未恢复的持续报错请求的ERROR日志
内容的提问来源于stack exchange,提问作者Vieypul
相关产品推荐
相关产品推荐

