1. 测试环境一出事,为什么最先翻日志的总是你
做过测试的人大概都有过这种经历:测试环境某个接口突然超时,或者某个功能偶发性报错,你在群里喊了一声,开发回复“我这看代码没毛病”,运维回复“服务器负载也不高啊”,环境搭建的同事说“配置没问题”。所有人都在等一个能证明“不是我的问题”的证据,最后这个找证据的活,往往落在测试头上。
很多测试工程师觉得翻日志是运维的事,自己只要把Bug提上去就行。但我想说一个我自己的感受:日志分析从来不只是运维的专属技能,而是测试工程师从“能发现问题”进阶到“能定位问题”的分水岭。懂得看Linux服务器日志的测试,和只会截报错弹窗的测试,在团队里的价值完全不是一个量级。前者提Bug能直接说“我看了应用日志,错误发生在处理订单回调时,空指针出现在XX模块”,后者只能复制一行报错上去,然后等开发慢慢查。
这篇文章就是写给所有想在服务器日志里“捞到宝”的测试工程师的。我会从日志在哪、怎么看、怎么分析、怎么避坑这几个角度,把我这些年实际排查中用到的方法和踩过的坑都梳理一遍。内容不追求大而全,主打一个实用:不管你是刚接触Linux命令,还是已经会用grep但总觉得分析没套路,这篇都能给你一些能直接上手的思路。
我先说个结论:日志分析这件事,七分靠方法,三分靠工具。很多人一上来就想着搭ELK、搞日志平台,但真到了排查眼下这个问题的时候,最靠谱的反而是你手上那几条Linux命令。工具能帮你处理海量日志,但帮不了你建立排查思路。所以这篇文章的主线不是教你搭什么系统,而是教你怎么用最朴素的命令,在日志里建立起自己的排查逻辑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 别急着进服务器,先搞清楚日志的“家底”在哪
我第一次被要求“去看下服务器日志”的时候,整个人是懵的。进了服务器连了终端,根本不知道该看哪个文件。后来踩了不少坑才明白,日志分析的第一步不是好看的命令技巧,而是对服务器日志分布有清晰的认知。不知道日志在哪儿,后面全白搭。
2.1 Linux系统层日志的默认位置与作用
绝大多数Linux发行版,系统日志都集中在/var/log目录下。你随便进一台跑得久一点的服务器,执行一个ls /var/log,基本就能看到这个家里都住了哪些“房客”。
我挑几个测试环境排查时最高频用到的文件:
/var/log/messages:CentOS/RHEL等发行版的系统级日志,记录内核消息、服务启停、网络变化等。测试环境网络抖动、磁盘报错,十有八九能在里面翻到线索。/var/log/syslog:Debian/Ubuntu系的对应文件,作用和messages一样。/var/log/secure:记录认证、登录、sudo操作的日志。你怀疑服务器被暴力破解、或者某个账号登录异常,就看这个文件。/var/log/cron:定时任务执行记录。定时脚本没跑,数据没同步,先来这里看有没有报错。/var/log/dmesg:内核环形缓冲区消息,主要记录硬件设备、驱动、系统启动期间的信息。硬件故障、内存报错、磁盘I/O异常,这里看最直接。
一个很常见的测试场景:测试环境某个服务起不来,你翻应用日志发现“连接超时”,然后去/var/log/messages里面看,发现当时网卡有过一次up/down记录,说明底层网络闪断过。这种“两层日志互相印证”的排查方式,才是日志分析真正的价值所在。
2.2 systemd日志:journalctl的查看姿势
现在新的Linux发行版基本都用systemd托管服务,对应的日志查看命令是journalctl。它不是以文件形式直接躺在/var/log,而是由systemd-journald服务管理,看起来“文件在哪”不那么直观,但查起来其实更方便。
几个测试工程师最常用的姿势:
bash复制# 查看某个服务最近的日志
journalctl -u your-service-name.service -n 100
# 查看某个时间段内的日志
journalctl --since "2025-01-10 14:00:00" --until "2025-01-10 14:30:00"
# 跟踪实时日志
journalctl -u your-service-name.service -f
# 查看上一次启动以来的日志,排查重启原因
journalctl -b -1 -e
我最常用的是-b参数。测试环境经常有人重启服务器,如果服务挂了你得判断是重启前有问题还是重启后有问题,journalctl -b -1能直接看到上一次启动期间系统发生了什么,非常关键。
小提示:journalctl默认显示的日志量很大,如果不加-n或时间段限制,输出会直接刷屏。我第一次用的时候没经验,敲完命令屏幕滚了几万行,最后还得Ctrl+C。后来学乖了,先-n 50看个大概,再决定要不要扩大范围。
2.3 应用日志的位置:部署方式决定路径
系统日志是“背景板”,真正排查问题的时候,更重要的其实是应用本身的日志。但应用日志的位置没有一个标准答案,它完全取决于你的项目是怎么部署的。
我这里给一个排查思路:如果不清楚应用日志在哪,可以按下面的顺序寻找:
- 看进程启动参数或配置文件,一般会指定日志路径,比如SpringBoot的
logging.file.path,Nginx的error_log指令。 - 看项目的日志框架配置,logback、log4j2、log4j等框架的配置文件里通常会写
<file>标签或appender的路径。 - 看部署目录下的
logs文件夹,很多Java应用习惯把日志输出到当前目录的logs子目录。 - 用
find命令全局搜索:find / -name "*.log" -mmin -30 2>/dev/null,查找最近30分钟内修改过的日志文件,这个方式在完全没头绪时非常有效。
我在公司处理一个Java服务日志丢失的问题时,开发一口咬定“肯定有日志”,结果我找到进程的启动脚本,发现`nohup java -jar xxx.jar > /dev/null 2>&
