Debian 上 Node.js 日志“不全”通常不是 Node 本身丢日志,而是运行方式 + 日志重定向 + 系统日志机制共同作用的结果。下面按最常见原因给你排查清单。
nohup / & 但只重定向了 stdoutnode app.js > app.log 2>&1 &
问题:
console.log ✅ 有✅ 正确做法:
node app.js >> app.log 2>&1
如果你是用:
systemctl start mynode
那 日志默认在 journal,不在文件里
查看方式:
journalctl -u mynode -f
常见 service 文件问题:
StandardOutput=journal
StandardError=journal
✅ 或改成:
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/app.log
Debian 默认有 logrotate:
检查:
ls -l /var/log/node/
✅ 解决:
winston / pino 支持 reopeningcopytruncateprocess.on('uncaughtException', e => {
console.error(e);
});
process.on('unhandledRejection', e => {
console.error(e);
});
否则:
console.log('exit');
process.exit();
✅ 可能没写完
应:
process.on('exit', () => {});
sudo -u node node app.js
而日志目录属于 root
检查:
namei -l /var/log/node/app.log
df -h
Node 会静默停止写日志
✅ 使用:
pm2systemd + journalwinston/pino示例(systemd):
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
WorkingDirectory=/opt/app
User=node
Restart=on-failure
StandardOutput=journal
StandardError=journal
| 现象 | 可能原因 |
|---|---|
| 有时有有时没 | & + 非 append |
| 崩溃无日志 | 未捕获异常 |
| 文件变小 | logrotate |
| 完全没 | journal |
| 写一会儿停 | 磁盘满 |
如果你愿意,可以贴:
我可以直接帮你定位是哪一种。