在 Debian 上“JS 日志丢失”通常不是 JS 本身的问题,而是运行环境 / 日志采集方式 / 权限 / 服务管理导致的。下面按常见原因逐条说明,并给排查办法。
如果你是:
systemctl start mynode.service
但 JS 里只是:
console.log('xxx')
默认情况下日志在 journal 里,不在文件里,很多人以为“丢了”。
✅ 查看方式:
journalctl -u mynode.service -f
✅ 想写文件:
const fs = require('fs');
fs.appendFileSync('/var/log/myapp.log', 'xxx\n');
常见错误写法:
node app.js > log.txt
node app.js > log.txt # 再次启动,覆盖
✅ 正确追加:
node app.js >> log.txt 2>&1
如果你用 pm2:
pm2 logs
日志默认在:
~/.pm2/logs/
常见问题:
✅ 检查:
df -h
pm2 status
Node 是异步的,console.log 不一定立即写盘。
如果:
日志可能没来得及写。
✅ 解决:
process.on('uncaughtException', e => {
fs.appendFileSync('/var/log/err.log', e.stack);
process.exit(1);
});
Debian 默认:
/var/log 只有 root 可写
普通用户运行 node:
fs.writeFileSync('/var/log/app.log')
会 静默失败或抛错被吞
✅ 解决:
/home/user/logs/sudo chown在容器里:
✅ 正确姿势:
console.log('info')
console.error('err')
查看:
docker logs <container>
Debian 默认有:
/etc/logrotate.d/
可能:
✅ 检查:
ls /var/log/
cat /etc/logrotate.d/*
# 1. 看进程是否还活着
ps aux | grep node
# 2. 看 systemd 日志
journalctl -u 你的服务 -n 100
# 3. 看磁盘
df -h
# 4. 看权限
ls -l /var/log/
# 5. 看是否 pm2
pm2 logs
winston / pino如果你愿意,可以告诉我:
我可以直接帮你定位“是哪一步丢的”。