Debian 上 Node.js 日志“丢失”通常不是 Node 本身把日志删了,而是运行方式 + 日志重定向 + 系统管理机制共同导致的。下面按最常见原因逐一说明。
& 或 nohup 启动,但没重定向日志node app.js &
✅ 正确做法:
node app.js >> /var/log/node/app.log 2>&1 &
如果你用 systemd 启动:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
Node 输出在 journald 里,而不是文件:
journalctl -u your-node-service
❌ 你以为“日志丢失”,其实在 journal 里
Debian 默认:
查看配置:
cat /etc/systemd/journald.conf
常见配置:
Storage=auto
SystemMaxUse=100M
MaxRetentionSec=2week
✅ 解决:
PM2 默认日志在:
~/.pm2/logs/
但:
✅ 检查:
pm2 logs
ls -lh ~/.pm2/logs
docker run node node app.js
容器退出后日志消失
✅ 解决:
docker run -v /var/log/node:/app/logs node node app.js
console.log,但进程崩溃uncaughtException✅ 建议:
process.on('uncaughtException', e => {
fs.appendFileSync('/var/log/node/err.log', e.stack);
});
Node 无法写:
/var/log/node
但错误也被吞掉
✅ 检查:
ls -ld /var/log/node
# 1. 是否在 journal
journalctl -u node服务名
# 2. 是否有日志文件
ls -lh /var/log/node
# 3. 启动命令是否重定向
ps aux | grep node
# 4. 磁盘是否满
df -h
# 5. 是否用了 PM2
pm2 list
✅ systemd + 文件日志:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js >> /var/log/node/app.log 2>&1
✅ 或用 PM2 + logrotate
如果你愿意,可以贴:
我可以直接帮你定位是哪一种“丢失”。