在 Debian 系统上,Node.js 日志“丢失”通常不是 Node 本身把日志删了,而是运行方式、系统日志机制或文件轮转导致的。下面按常见原因分类说明。
systemd 方式运行(日志不在文件里)如果你用:
systemctl start mynode
Node 的 console.log 默认会进入 journald,而不是文件。
✅ 查看方式:
journalctl -u mynode.service
journalctl -u mynode.service --since "1 hour ago"
❌ 误区:
“我没看到日志文件,所以日志丢了”
实际是:
日志在 systemd 里,没落盘
Debian 默认有 logrotate,如果:
dailycopytruncate结果:
app.log.1)app.log 是空的✅ 检查:
ls -l /var/log/
cat /etc/logrotate.d/*
✅ 正确做法:
/var/log/app.log {
daily
rotate 7
copytruncate
missingok
notifempty
}
& 或 nohup 后台运行,但终端关闭例如:
node app.js > app.log 2>&1 &
终端退出后:
✅ 推荐:
systemdpm2 / foreverdf -h
如果 /var 或 / 满了:
✅ 检查:
df -h
dmesg | grep error
例如:
fs.createWriteStream('logs/app.log')
但:
结果:
✅ 建议:
path.join(__dirname, 'logs/app.log')
console.log,没落盘console.log('error')
如果:
→ 日志只存在于 stdout
✅ 推荐:
winstonpinobunyanprocess.on('uncaughtException', ...)
如果没处理:
✅ 至少:
process.on('uncaughtException', e => {
console.error(e);
process.exit(1);
});
✅ 正确:
docker logs <container>
或挂载 volume
# 1. 系统日志
journalctl -u your-node.service
# 2. 磁盘
df -h
# 3. 日志轮转
ls -l /var/log
cat /etc/logrotate.d/*
# 4. 进程
ps aux | grep node
# 5. Node 工作目录
pwdx <pid>
Debian 上 Node 日志“丢失”,90% 是因为:日志在 journald、被 logrotate 截断、或进程已退出。
如果你愿意,可以告诉我:
我可以直接帮你定位到具体原因 + 修复方案。