syslog 日志格式没有年份
Nov 15 13:57:05 VM-0-8-centos spring_ruoyi_admin_jar: at org.springframework...
Nov 15 13:57:05 只有月日时分秒,没有年份。如果是当前年度的历史日志,通常是前一年或当年的同月。
查看完整时间戳:
journalctl -u spring_ruoyi_admin_jar -o short-iso
输出带完整 ISO 时间:
2025-11-15T13:57:05+08:00 VM-0-8-centos spring_ruoyi_admin_jar: ...
按时间范围查询
# 精确时间段
journalctl -u spring_ruoyi_admin_jar \
--since "2025-11-15 13:52:00" \
--until "2025-11-15 14:02:00"
# 最近 10 分钟
journalctl -u spring_ruoyi_admin_jar --since "10 minutes ago"
# 今天的日志
journalctl -u spring_ruoyi_admin_jar --since today
查看最近 N 条
# 最近 50 条,带完整时间
journalctl -u spring_ruoyi_admin_jar -n 50 -o short-iso
实时追踪(类似 tail -f)
journalctl -u spring_ruoyi_admin_jar -f
关键词上下文查询
查看匹配行前后各 50 行:
journalctl -u spring_ruoyi_admin_jar -n 1000 | grep -C 50 "查询简单视图数据失败"
-C 50 等价于 --context=50,显示匹配行前后各 50 行。
普通日志文件(非 systemd)
grep -nC 快速查上下文
grep -nC 50 "查询简单视图数据失败" /opt/logs/app.log
输出:
123400-2025-11-15 13:56:58 INFO ...
...
123450:2025-11-15 13:57:05 ERROR 查询简单视图数据失败
...
123500-2025-11-15 13:57:12 INFO ...
-n 显示行号,-C 50 前后各 50 行。
先找行号再打印范围
# 先找到行号
grep -n "查询简单视图数据失败" app.log
# 123456:2025-11-15 13:57:05 ERROR 查询简单视图数据失败
# 打印第 123400 到 123500 行
sed -n '123400,123500p' app.log
多关键词过滤
有时候真正原因在后面的 Caused by:
grep -nC 20 "Caused by" app.log | grep -A 10 "13:57"
先找异常根因,再按时间过滤。
Docker 容器日志
# 按时间范围
docker logs --since "2025-11-15T13:52:00" --until "2025-11-15T14:02:00" 容器名
# 最近 100 条
docker logs --tail 100 容器名
# 实时
docker logs -f 容器名
Spring Boot 应用常见排查流程
- 先用
grep -n "ERROR" app.log找所有错误行号 - 用
grep -nC 30 "Caused by" app.log找根本原因 - 如果有 requestId/traceId,用
grep "traceId=xxx" app.log找完整请求链路 - 对照时间和堆栈确认是 DB 异常、Redis 异常还是下游服务超时
