在 Ubuntu 上“JS 日志丢失”通常不是单一原因,而是日志写哪儿、进程怎么跑、系统怎么回收这几件事没对齐。下面按最常见场景帮你排查。
不同场景,丢失原因完全不同:
console.logwinston / pino / log4js很多人在 Ubuntu 上这样跑:
node app.js > log.txt &
问题:
✅ 解决:
nohup node app.js >> log.txt 2>&1 &
或用 pm2:
pm2 start app.js
如果你用 systemd:
[Service]
ExecStart=/usr/bin/node /app/app.js
JS 的 console.log 会进 journald,不是文件!
查看:
journalctl -u your-service -f
✅ 想要文件日志:
StandardOutput=append:/var/log/app.log
StandardError=append:/var/log/app.err
Ubuntu 默认会轮转 /var/log
如果:
> 而不是 >>rotate 后新日志写不进去
✅ 检查:
ls -l /var/log/app*
cat /etc/logrotate.d/your-app
df -h
df -i
日志满了直接丢弃,不报错。
比如:
process.exit(0)
winston / pino 还没写完
✅ 解决:
await logger.end()
process.exit(0)
前端日志本来就不落盘:
✅ 建议:
window.onerror = (msg, url, line) => {
fetch('/log', { method:'POST', body: msg })
}
Docker 默认日志在:
/var/lib/docker/containers/
如果:
✅ 解决:
docker run -v /host/log:/app/log ...
你可以照着回答,我可以直接定位:
如果你愿意,把启动方式 + 日志配置代码片段贴出来,我可以直接告诉你“哪一行在丢日志”。