在 Linux 上用 Node.js 部署服务时,“日志怎么定位问题”通常分 三层:日志在哪 → 日志怎么看 → 怎么快速定位异常。下面按实战方式讲。
常见方式:
console.log / console.errorwinston、pino、log4js看代码里日志写到哪了,例如:
winston.add(new winston.transports.File({ filename: 'logs/app.log' }));
pm2 logs
pm2 logs app-name
pm2 logs --lines 200
日志默认在:
~/.pm2/logs/
如果是 systemctl 启动:
journalctl -u your-node-service
journalctl -u your-node-service -f
journalctl -u your-node-service --since "2024-01-01 10:00"
docker logs container_name
docker logs -f container_name
docker logs --tail 200 container_name
tail -f app.log
tail -n 200 app.log
grep -n "Error" app.log
grep -n "ECONNREFUSED" app.log
sed -n '/10:00:00/,/10:05:00/p' app.log
grep -c "Error" app.log
日志里出现:
Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect
✅ 直接看:
heap out of memory
node --max-old-space-size=1024 app.js
const start = Date.now();
// ...
console.log(`cost: ${Date.now() - start}ms`);
一定要加:
process.on('uncaughtException', e => {
console.error('uncaughtException', e);
});
process.on('unhandledRejection', e => {
console.error('unhandledRejection', e);
});
✅ 每条日志包含:
示例(pino):
logger.error({ reqId, err }, 'db query failed');
ps aux | grep node
pm2 logs --lines 100 | grep ERROR
如果你愿意,可以贴一段 日志内容或启动方式(PM2 / Docker / systemd),我可以直接帮你定位具体问题。