分析 Debian 上的 Node.js 日志,通常可以从日志来源、日志内容、分析工具、常见问题定位四个层面来做。下面给你一个比较系统的实战指南。
Node.js 应用一般会:
stdout / stderr/var/log/myapp/
/opt/app/logs/
常见日志文件:
app.log
error.log
access.log
如果 Node.js 是通过 systemd 运行的(最常见):
journalctl -u your-node-service.service
实时查看:
journalctl -u your-node-service.service -f
查看最近 100 行:
journalctl -u your-node-service.service -n 100
查看某时间段:
journalctl --since "2025-01-01" --until "2025-01-02"
✅ 这是 Debian 上最重要的日志入口
如果用的是 PM2:
pm2 logs
pm2 logs app-name
查看错误日志:
pm2 logs --err
日志路径一般在:
~/.pm2/logs/
如果 Node.js 在 Nginx 后面:
/var/log/nginx/access.log
/var/log/nginx/error.log
| 错误 | 含义 |
|---|---|
EADDRINUSE |
端口被占用 |
ECONNREFUSED |
连接被拒绝 |
ETIMEDOUT |
请求超时 |
ENOENT |
文件不存在 |
ERR_HTTP_HEADERS_SENT |
重复响应 |
Cannot find module |
依赖缺失 |
Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:xxx)
重点看:
grep -i error app.log
grep -i exception app.log
grep -i "failed" app.log
tail -n 200 app.log
tail -f app.log
grep -c "Error" app.log
awk '/2025-01-01 10:/,/2025-01-01 11:/' app.log
cat app.log | jq .
筛选错误:
cat app.log | jq 'select(.level=="error")'
dmesg | grep -i oom
长期运行后:
可配合:
node --inspect
✅ 使用结构化日志(JSON)
✅ 区分 info / warn / error
✅ 日志中带 requestId / traceId
✅ 错误日志必须包含堆栈
✅ 不要只 console.log
# 1. 看服务状态
systemctl status your-node-service
# 2. 看 systemd 日志
journalctl -u your-node-service -n 100
# 3. 看应用日志
tail -f /var/log/myapp/error.log
# 4. 看系统资源
htop
df -h
如果你愿意,可以把一段真实日志贴出来(或脱敏后),我可以帮你逐行分析具体错误原因。