Linux 多文件日志搜索方法

3次阅读

linux 多文件日志搜索需组合 find 定位文件与 grep 提取内容:先用 find 按名、时间等条件筛选日志文件,再用 grep - r 递归搜索关键字,支持正则、上下文显示、高亮、分页及结果导出。

Linux 多文件日志搜索方法

Linux 多文件日志搜索,核心是组合 find 定位文件 + grep 提取内容,而不是靠单一命令硬扫。

按名称批量找日志文件

先明确要查哪些文件,比如所有以 .log 结尾、或包含 error 字样的日志:

  • find /var/log -name "*.log" —— 查找 /var/log 下全部 .log 文件
  • find /app/logs -name "app-*.log" -mtime -1 —— 找过去 24 小时内生成的 app- 开头日志
  • find . -iname "*access*" -o -iname "*error*" —— 不区分大小写,找含 access 或 error 的文件名

在多个文件里搜关键字(或 / 且关系)

定位到文件后,用 grep -r 直接递归搜索,比逐个 cat | grep 更高效:

  • grep -r "timeout" /var/log/nginx/ —— 在整个 nginx 日志目录里搜 timeout
  • grep -r -E "500|502|504" /var/log/nginx/ —— 搜任意一种 HTTP 错误码(-E 必须加 ,否则 | 当普通字符处理)
  • grep -r "Connection refused" /var/log/ | grep "mysql" —— 先找出含 Connection refused 的行,再从中筛选带 mysql 的(实现“且”逻辑)

带上下文和高亮的精准查看

查到匹配行后,常需看前几行或后几行辅助判断上下文:

  • grep -r -A 2 -B 1 "panic" /var/log/kern.log* —— 每个匹配行显示前 1 行、后 2 行
  • grep --color=always -n "WARN" app.log | head -20 —— 高亮 WARN 并标出行号,只看前 20 条
  • grep -r -i "failed to connect" /app/logs/ | less —— 结果太多时用 less 分页,按 / 可继续搜索

快速提取并保存结果

把关键线索导出成新文件,方便后续分析或上报:

  • grep -r "OutOfMemoryError" /var/log/tomcat/ > oom-report.log
  • find /data/logs -name "*.out" -mtime -7 | xargs grep -l "Exception" > exception-files.txt —— 找近 7 天含 Exception 的 .out 文件名列表
  • grep -r "order_id=.*[0-9a-f]{8}" /var/log/app/ | cut -d' ' -f1,4- | sort -u —— 提取 order_id 及其上下文字段,去重排序
text=ZqhQzanResources