网站打不开、接口返回500、后台任务突然卡住……遇到这些情况,别急着重启服务,先看看服务器端日志——它就像服务器的“行车记录仪”,记下了每一步操作和异常细节。
日志文件通常藏在哪?
不同服务存放位置不一样,但常见路径有这些:
- Nginx:/var/log/nginx/access.log(访问记录)和 error.log(错误信息)
- Apache:/var/log/apache2/access.log 和 error.log(Ubuntu/Debian)或 /var/log/httpd/(CentOS)
- Tomcat:/opt/tomcat/logs/catalina.out(主日志,含启动、报错、Java异常)
- Node.js 应用:一般由你自己指定,比如 ./logs/app.log 或通过 pm2 logs 查看
不确定路径?登录服务器后,先试试:
ps aux | grep -E '(nginx|apache|java|node)'看进程参数里有没有 --log-file 或 -Dlog4j.configurationFile 这类线索。怎么看才不懵?盯住这三类关键信息
1. 时间戳:日志开头那一串带年月日时分秒的字段,比如 [24/Jul/2024:10:22:31 +0800]。排查问题时,先对齐你收到用户反馈的时间,再往前后翻1–2分钟的日志。
2. 状态码:HTTP 请求里最直观的“病情诊断书”。看到大量 502 Bad Gateway,说明 Nginx 找不到后端;满屏 500 Internal Server Error,就得去查应用日志里的 Java/Python 异常堆栈;而 404 频繁出现,可能是前端路由写错或静态资源路径配置漏了。
3. 错误关键词:直接搜 Exception、ERROR、Traceback、failed、Connection refused。Linux 下常用:
tail -f /var/log/nginx/error.log | grep "ERROR"或者实时追踪并高亮:tail -f catalina.out | grep --color=always -i "exception\|error\|fatal"举个真实例子:用户说“提交订单总失败”
你登上服务器,打开 Tomcat 日志:
tail -n 200 catalina.out扫到这么一段:
Caused by: java.sql.SQLTimeoutException: Timeout after 30000ms of waiting for a connection.<br>at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:199)<br>at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)立刻明白:数据库连接池耗尽,不是代码逻辑错,而是 DB 响应慢或连接没释放。接下来就该查 MySQL 的 show processlist,或者看是否有长事务堵着。
小技巧:别硬翻,善用工具
日志动辄几百MB?别用 vim 慢慢拖。推荐几个顺手操作:
- 查某IP最近10次请求:
grep "192.168.1.100" access.log | tail -10 - 统计每分钟请求数(适合压测分析):
awk '{print $4}' access.log | cut -c2-18 | sort | uniq -c | sort -nr | head -20 - 用
lnav(装法:sudo apt install lnav):支持语法高亮、按状态码过滤、跳转错误行,体验接近 IDE。
最后提醒一句:生产环境别关日志,也别只留1天——至少保留7天,磁盘够用的话建议30天。出问题时,昨天的日志,可能就是救命稻草。