如何看线上日志
一、日志路径怎么找
方法一:看配置文件
Java 项目的日志路径通常写在日志框架的配置文件里。打开你项目的 src/main/resources 目录,找这几个文件:
logback-spring.xml(最常见)logback.xmllog4j2.xml
打开之后搜 file 或 path 关键字,一般能找到类似这样的配置:
<property name="LOG_PATH" value="/var/log/order-service"/>这个路径就是日志输出的位置。这是最准的方式,因为它告诉你的是项目实际配置的路径,不是猜的。
方法二:看启动脚本
如果项目是用 nohup java -jar xxx.jar 启动的,那 nohup 会把控制台输出重定向到一个文件。看一下启动脚本(通常是 start.sh 或部署平台的命令),找类似这样的写法:
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.logzcloud-learning.log.2026-07-03zcloud-learning.log.2026-07-02zcloud-learning-error.logzcloud-learning.log.2026-07-03startup.log看哪个文件,取决于你要解决什么问题:
| 你想解决的问题 | 看哪个文件 |
|---|---|
| 刚刚调接口报错了 | zcloud-learning.log(当天的主日志) |
| 想只看报错信息 | order-service-error.log(错误专用日志) |
| 服务启动失败 | startup.log 或主日志的最开头部分 |
| 昨天的问题,今天的日志已经滚动了 | zcloud-learning.log.2026-07-02(按日期命名的历史日志) |
大部分时候你需要看的是当天的主日志文件,文件名没有日期后缀的那个(比如 zcloud-learning.log)。如果配置了 error 日志单独输出,排查报错的时候先看 error 日志会更快,因为它只记录错误,不用在一堆 info 日志里翻。
找历史日志的要点
有一种场景更常见:测试同学反馈”昨天下午某个功能报错了”,你去复现发现是好的。这种问题没法重现,只能去翻对应那天的历史日志。操作步骤:
- 先确认问题发生的时间点。越精确越好,“昨天下午”和”昨天下午3点到4点之间”差别很大。
- 根据时间找到对应的日志文件。如果日志按天分割,直接看文件名日期就行,比如
zcloud-learning.log.2026-07-02。有些项目配置了按小时分割,文件名会带小时后缀,比如zcloud-learning.log.2026-07-02-15表示 14 号下午 3 点到 4 点的日志。 - 打开文件后,用时间关键字缩小范围,再用错误关键字定位。
# 在历史日志里搜某个时间段的报错grep "2026-07-02 15:" zcloud-learning.log.2026-07-02 | grep "ERROR"还有一个坑要注意:日志不会永远保留。服务器磁盘空间有限,运维一般会配置日志保留策略,比如只保留 7 天或 15 天。如果问题发生在一个月前,对应的日志文件大概率已经被清理了。所以遇到需要翻历史日志的问题,尽快去看,拖久了日志可能就没了。
三、找到日志了,怎么看
情况一:问题可以复现,想实时看
用 tail -f,它会持续输出文件末尾新增的内容。先打开 tail -f,然后去调接口,日志会实时滚出来,按 Ctrl+C 停止。
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 参数:
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.logless会分页打开文件,用方向键翻页,按/输入关键字搜索,按n跳到下一个匹配项,按q退出。 -
想用编辑器的搜索功能 → 下载到本地:
用 VS Code 或 Notepad++ 打开,支持高亮、正则、多文件搜索,适合需要反复翻阅的场景。前提是公司允许把日志下载到本地——有些安全要求高的团队会限制这个操作,不确定的话先问一下。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!














