Linux 日志检索速查:按时间、接口、Trace ID 查询完整请求链路

本文整理常用日志检索命令,用于快速定位某个时间段内指定接口的 request、response 以及中间业务日志。

日志格式说明

典型日志格式:

text 复制代码
2026-05-14 14:06:20.880 [http-nio-6072-exec-5] INFO  trace_id span_id trace_flags logger - message

常用字段:

  • 第 1-2 列:日志时间
  • 第 5 列:trace_id
  • => Request:请求日志
  • <= Response:响应日志
  • cost:接口耗时
  • Params.body:请求体

1. 查询某个时间段所有日志

适合查看 14:05:0014:06:59 的全部日志,并保留异常堆栈等多行内容。

bash 复制代码
DATE="2026-05-14"

awk -v start="$DATE 14:05:00.000" -v end="$DATE 14:07:00.000" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  printing=(ts >= start && ts < end)
}
printing
' logs/app.log logs/error.log

2. 快速粗查某两分钟关键行

只看单行日志时可以用 grep

bash 复制代码
grep -E "2026-05-14 14:05|2026-05-14 14:06" logs/app.log logs/error.log

3. 按接口路径查询 Request / Response

示例接口:

bash 复制代码
URI="/badge-application/parent/application"
DATE="2026-05-14"

awk -v start="$DATE 14:05:00.000" -v end="$DATE 14:07:00.000" -v uri="$URI" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  in_range=(ts >= start && ts < end)
}
in_range && index($0, uri) > 0
' logs/app.log logs/error.log

4. 根据接口日志提取 Trace ID

请求和响应之间的业务日志通常可以用同一个 trace_id 串起来。

bash 复制代码
DATE="2026-05-14"
URI="/badge-application/parent/application"

awk -v start="$DATE 14:05:00.000" -v end="$DATE 14:07:00.000" -v uri="$URI" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  in_range=(ts >= start && ts < end)
}
in_range && index($0, uri) > 0 {
  print $5
}
' logs/app.log logs/error.log | sort -u

5. 根据 Trace ID 查询完整链路

bash 复制代码
TRACE_ID="1549b119274cfe3c57b4e21c54fc43d9"

grep -F "$TRACE_ID" logs/app.log logs/error.log

6. 自动查询指定接口的完整链路

一步提取接口相关 trace_id,再输出这些请求的全部日志。

bash 复制代码
DATE="2026-05-14"
URI="/badge-application/parent/application"

TRACE_IDS=$(awk -v start="$DATE 14:05:00.000" -v end="$DATE 14:07:00.000" -v uri="$URI" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  in_range=(ts >= start && ts < end)
}
in_range && index($0, uri) > 0 {
  print $5
}
' logs/app.log logs/error.log | sort -u)

for tid in $TRACE_IDS; do
  echo "===== TRACE_ID: $tid ====="
  grep -F "$tid" logs/app.log logs/error.log
done

7. 查询归档压缩日志

如果日志已滚动为 .gz 文件,使用 zgrepzcat

bash 复制代码
zgrep -F "$TRACE_ID" logs/app-2026-05-14-*.log.gz logs/error-2026-05-14-*.log.gz

保留多行堆栈时:

bash 复制代码
DATE="2026-05-14"

zcat logs/app-"$DATE"-*.log.gz logs/error-"$DATE"-*.log.gz 2>/dev/null | awk -v start="$DATE 14:05:00.000" -v end="$DATE 14:07:00.000" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  printing=(ts >= start && ts < end)
}
printing
'

8. 从请求体中提取学生学号

如果学号在图片 URL 中,例如:

text 复制代码
filePath=2009268_Test, Student13!

可以这样提取:

bash 复制代码
grep -F "/badge-application/parent/application" logs/app.log \
  | grep -oE 'filePath=[0-9]+' \
  | sed 's/filePath=//' \
  | sort -u

如果要带时间段:

bash 复制代码
DATE="2026-05-14"
URI="/badge-application/parent/application"

awk -v start="$DATE 13:00:00.000" -v end="$DATE 15:00:00.000" -v uri="$URI" '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}/ {
  ts=substr($0,1,23)
  in_range=(ts >= start && ts < end)
}
in_range && index($0, uri) > 0
' logs/app.log | grep -oE 'filePath=[0-9]+' | sed 's/filePath=//' | sort -u

9. 常用排查顺序

  1. 先按时间段查接口 request / response。
  2. 从接口日志中拿到 trace_id
  3. trace_id 查询完整链路。
  4. 如果没有业务日志,确认是否只打印了 filter 日志。
  5. 如果当前日志没有,继续查当天 .gz 归档。
  6. 输出给他人排查前,脱敏 authorization、手机号、身份证、学生姓名等敏感信息。
相关推荐
●VON19 小时前
AtomGit Flutter鸿蒙客户端:文件树与代码浏览
android·服务器·安全·flutter·harmonyos·鸿蒙
bush41 天前
嵌入式linux学习记录七,中断
linux·嵌入式
RisunJan1 天前
Linux命令-nologin(用于系统账户或需要禁止交互式登录的场景)
linux·运维
是阿建吖!1 天前
【Linux】信号
android·linux·c语言·c++
城北徐宫1 天前
Linux信号深度解剖:5种产生、3张表、4次切换
linux·c++·学习
倔强的石头1061 天前
【Linux指南】Linux快捷键与系统实用技巧
linux·运维·服务器
番茄地瓜1 天前
Linux 配置静态 IP 步骤
linux·运维·服务器
liulilittle1 天前
论 Linux 内核态全局稳态带宽的卡尔曼估计与工程实现
linux·服务器·网络·c++·计算机网络·tcp·通信
Irissgwe1 天前
五、应用层协议HTTP
linux·网络·网络协议·http·状态码·url
心之伊始1 天前
Java 后端接入大模型:从 Token、并发到推理成本的完整估算方法
java·spring boot·性能优化·大模型·llm