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、手机号、身份证、学生姓名等敏感信息。
相关推荐
新时代牛马8 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
Julien20049 小时前
控制 SELinux 文件上下文
linux·运维·服务器
EXI-小洲9 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
sulikey9 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
Lifangyun_WD9 小时前
第一次租 GPU 服务器怎么开始?镜像、SSH、数据存储和停机前要做什么
服务器·云计算·gpu算力·gpu算力租赁
2601_9619017010 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
DevLoom_10 小时前
SD卡插电脑提示:驱动器中的磁盘未被格式化?恢复数据正确处理步骤
运维·服务器·电脑
何以解忧,唯有..10 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_216962909611 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
MayZork12 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows