读懂 Node.js 在 Linux 上的日志,核心不是“看文件”,而是先搞清楚日志从哪来、以什么形式记录、再看什么内容。下面按实用顺序讲。
常见方式:
console.log / console.errorwinston、pino、bunyan、morgan(HTTP)典型位置:
/app/logs/
/var/log/myapp/
stdout / stderr(被 systemd 或 pm2 捕获)
pm2 logs
pm2 logs appName
~/.pm2/logs/
journalctl -u yourapp.service
journalctl -u yourapp.service -f # 实时
journalctl -u yourapp.service --since "2024-01-01"
/var/log/nginx/error.log/var/log/syslog、/var/log/messagesGET /api/user 200 12ms
关注:
Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect
重点看:
(node:12345) Warning: Possible EventEmitter memory leak
通常是:
worker exited
uncaughtException
说明进程直接挂了,需要看崩溃前最后日志
tail -f app.log
journalctl -u yourapp -f
grep -i error app.log
grep -C 5 "ECONNREFUSED" app.log
sed -n '/10:20/,/10:30/p' app.log
journalctl --since "10 min ago"
grep " 500 " access.log | wc -l
awk '{print $1}' access.log | sort | uniq -c
✅ 解决:
console.log✅ 建议:
pino(快、JSON)stdout / stderr✅ 检查:
{
"level": "error",
"time": "2024-01-01T10:00:00Z",
"msg": "DB connection failed",
"stack": "...",
"pid": 1234
}
你只需看:
如果你愿意,可以把一段真实日志贴出来(脱敏),我可以直接帮你“逐行翻译”是什么意思、问题在哪。