Linux 下 JS(Node.js / 前端构建 / 服务端 JS)日志“丢失”通常不是真的没产生,而是被缓冲、重定向、覆盖或被进程管理工具吞掉。下面按最常见原因系统性说明:
现象
console.log 没内容原因
stdout 是块缓冲✅ 解决:
node app.js | stdbuf -oL cat
或:
process.stdout.write(...)
常见错误写法
node app.js > log.txt
❌ 只重定向 stdout,stderr 丢了
✅ 正确:
node app.js > log.txt 2>&1
nohup node app.js &
默认会写:
nohup.out
但:
✅ 建议显式指定:
nohup node app.js > app.log 2>&1 &
[Service]
ExecStart=/usr/bin/node app.js
❌ 日志不在文件里,而在:
journalctl -u your-service
✅ 想写文件:
StandardOutput=append:/var/log/app.log
StandardError=append:/var/log/app.err
PM2 默认:
~/.pm2/logs/app-out.log
常见问题:
✅ 查看:
pm2 logs
pm2 flush
throw new Error('x')
→ 进程死,缓冲没刷
✅ 必须:
process.on('uncaughtException', e => {
console.error(e)
process.exit(1)
})
如:
✅ 崩溃前:
logger.end()
JS 日志应打到 stdout:
console.log(...)
查看:
docker logs container_id
❌ 写在容器里 /var/log 会丢
df -h
ls -l logfile
你可以逐一排查:
2>&1如果你愿意,可以告诉我:
我可以直接帮你定位到具体哪一行配置有问题。