在 Debian 上“Node.js 日志丢失”通常不是 Node 本身把日志删了,而是日志去哪儿了 / 被谁接走了 / 被轮转或覆盖掉了。可以按下面顺序排查和“救”。
ps -ef | grep node
重点看:
> /var/log/xxx.log 2>&1pm2 / systemctl / docker/var/log/xxx/
~/project/logs/
journalctl -u your-node-service
pm2 logs
Debian 默认用 journald,不写文件,所以你以为“日志丢了”。
journalctl -u node.service --since "2024-01-01"
journalctl -u node.service -n 1000
journalctl -u node.service > node-logs.txt
ls /var/log/journal/
若为空,说明已被 journalctl --vacuum 清掉,基本无法恢复。
Debian 常用 logrotate:
cat /etc/logrotate.d/node
常见问题:
missingoknotifemptyls -lh /var/log/node*
看到 .1 .gz 说明已被切走。
zcat /var/log/node.log.1.gz
console.log 异步kill -9✅ 建议:
winston / pinoprocess.on('exit', () => {})
错误写法(会清空):
node app.js > log.txt
正确追加:
node app.js >> log.txt 2>&1
dmesg | grep node
/var/log/syslog
/var/log/kern.log
grep -i "out of memory" /var/log/syslog
lsof | grep node | grep deleted
如果是:
ls -l /proc/<pid>/fd/
还能 cp 出来。
✅ 用 systemd + journal
✅ 或 pm2 + 日志文件
✅ 不要手动 > log
✅ 日志库代替 console.log
✅ 配置 logrotate 正确 reload
如果你愿意,可以告诉我:
我可以直接帮你写 恢复命令或配置。