如何看线上日志

1450 字
7 分钟
如何看线上日志

一、日志路径怎么找#

方法一:看配置文件

Java 项目的日志路径通常写在日志框架的配置文件里。打开你项目的 src/main/resources 目录,找这几个文件:

  • logback-spring.xml(最常见)
  • logback.xml
  • log4j2.xml

打开之后搜 filepath 关键字,一般能找到类似这样的配置:

<property name="LOG_PATH" value="/var/log/order-service"/>

这个路径就是日志输出的位置。这是最准的方式,因为它告诉你的是项目实际配置的路径,不是猜的。

方法二:看启动脚本

如果项目是用 nohup java -jar xxx.jar 启动的,那 nohup 会把控制台输出重定向到一个文件。看一下启动脚本(通常是 start.sh 或部署平台的命令),找类似这样的写法:

Terminal window
nohup java -jar order-service.jar > /var/log/order-service/startup.log 2>&1 &

> 后面跟的就是启动日志的路径。这个日志里会有应用启动时的输出,包括 Spring 的启动信息和一些早期报错。

方法三:问 AI

如果项目能访问外网,可以用 Claude Code、CodeX 这类 AI 工具直接读你的项目代码,它会帮你找到日志配置文件并告诉你路径在哪。

方法四:看文档或问同事

有些团队会有部署文档或运维文档,里面会写各个服务的日志路径,入职的时候留意一下有没有这种文档。有文档就先看文档,没有再问同事。

直接问同事:“咱们这个服务的日志在服务器哪个目录下?“。


二、找到了一堆文件,看哪个#

假设你已经知道日志在 /var/log/order-service/ 目录下,SSH 上去 ls 一看,可能长这样:

zcloud-learning.log
zcloud-learning.log.2026-07-03
zcloud-learning.log.2026-07-02
zcloud-learning-error.log
zcloud-learning.log.2026-07-03
startup.log

看哪个文件,取决于你要解决什么问题:

你想解决的问题看哪个文件
刚刚调接口报错了zcloud-learning.log(当天的主日志)
想只看报错信息order-service-error.log(错误专用日志)
服务启动失败startup.log 或主日志的最开头部分
昨天的问题,今天的日志已经滚动了zcloud-learning.log.2026-07-02(按日期命名的历史日志)

大部分时候你需要看的是当天的主日志文件,文件名没有日期后缀的那个(比如 zcloud-learning.log)。如果配置了 error 日志单独输出,排查报错的时候先看 error 日志会更快,因为它只记录错误,不用在一堆 info 日志里翻。

找历史日志的要点

有一种场景更常见:测试同学反馈”昨天下午某个功能报错了”,你去复现发现是好的。这种问题没法重现,只能去翻对应那天的历史日志。操作步骤:

  1. 先确认问题发生的时间点。越精确越好,“昨天下午”和”昨天下午3点到4点之间”差别很大。
  2. 根据时间找到对应的日志文件。如果日志按天分割,直接看文件名日期就行,比如 zcloud-learning.log.2026-07-02。有些项目配置了按小时分割,文件名会带小时后缀,比如 zcloud-learning.log.2026-07-02-15 表示 14 号下午 3 点到 4 点的日志。
  3. 打开文件后,用时间关键字缩小范围,再用错误关键字定位。
Terminal window
# 在历史日志里搜某个时间段的报错
grep "2026-07-02 15:" zcloud-learning.log.2026-07-02 | grep "ERROR"

还有一个坑要注意:日志不会永远保留。服务器磁盘空间有限,运维一般会配置日志保留策略,比如只保留 7 天或 15 天。如果问题发生在一个月前,对应的日志文件大概率已经被清理了。所以遇到需要翻历史日志的问题,尽快去看,拖久了日志可能就没了。


三、找到日志了,怎么看#

情况一:问题可以复现,想实时看

tail -f,它会持续输出文件末尾新增的内容。先打开 tail -f,然后去调接口,日志会实时滚出来,按 Ctrl+C 停止。

Terminal window
tail -f zcloud-learning.log

如果日志刷得很快(比如有定时任务在跑),你触发的日志一下子就被刷过去了,这时候加过滤:

  • 问题是报错 → 过滤 ERROR:

    Terminal window
    tail -f zcloud-learning.log | grep "ERROR"
  • 问题是业务逻辑异常 → 过滤业务关键词,比如订单号:

    Terminal window
    tail -f zcloud-learning.log | grep "10086"

想看匹配行的上下文(比如报错那行的前后 5 行),加 -C 参数:

Terminal window
tail -f zcloud-learning.log | grep -C 5 "ERROR"

情况二:问题已经发生过了,事后搜索

这种场景用 grep 直接在日志文件里搜。搜什么取决于你知道什么:

  • 知道报错类型 → 搜异常名:

    Terminal window
    grep "NullPointerException" zcloud-learning.log
  • 知道业务参数 → 搜订单号、用户ID等:

    Terminal window
    grep "10086" zcloud-learning.log
  • 知道大致时间段 → 用两个 grep 组合,先缩小范围再定位:

    Terminal window
    grep "2026-07-03 14:" zcloud-learning.log | grep "ERROR"

如果你的项目日志格式规范,每条日志都带订单号或 requestId,用业务关键词能把同一个请求的所有日志串起来。前提是日志里确实打了这个字段——这也是为什么写代码时要在关键节点打印业务标识。

除了 grep,事后搜索还有两种方式:

  • 文件太大,想边翻边看上下文 → 用 less

    Terminal window
    less zcloud-learning.log

    less 会分页打开文件,用方向键翻页,按 / 输入关键字搜索,按 n 跳到下一个匹配项,按 q 退出。

  • 想用编辑器的搜索功能 → 下载到本地:

    用 VS Code 或 Notepad++ 打开,支持高亮、正则、多文件搜索,适合需要反复翻阅的场景。前提是公司允许把日志下载到本地——有些安全要求高的团队会限制这个操作,不确定的话先问一下。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
如何看线上日志
https://study-docs-158.pages.dev/posts/如何看线上日志/
作者
我的学习小铺
发布于
2026-08-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
我的学习小铺
学而时习之
分类
标签
最新动态
站点统计
文章
44
分类
8
标签
9
总字数
126,514
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.15.3
文章许可
CC BY-NC-SA 4.0