在 Linux 上 Node.js 日志“丢失”通常不是真的没产生,而是输出位置、缓冲、进程管理或重定向出了问题。下面按最常见原因逐一说明,并给出排查和解决办法。
console.log / console.errorpm2 / systemd / nohup 后就“没了”Node.js 默认日志在:
console.log → stdoutconsole.error → stderr进程被后台运行后,这些流可能被:
确认运行方式:
node app.js > app.log 2>&1
PM2:
pm2 logs
pm2 logs app
systemd:
journalctl -u your-service -f
console.error(stderr 通常是无缓冲)process.stdout.write)SIGKILLprocess.exit() 立即退出SIGKILL 无法捕获process.on('uncaughtException', e => {
console.error(e);
process.exit(1);
});
process.on('SIGTERM', () => {
// 清理 & 写日志
process.exit(0);
});
使用同步或可靠日志库(见下)
transport: new transports.File({ filename: 'log.txt' })
但:
const path = require('path');
filename: path.resolve('/var/log/app/app.log')
console.log 看不到systemd 默认接管道日志
[Service]
StandardOutput=journal
StandardError=journal
查看:
journalctl -u yourapp -f
SIGUSR1 重开日志docker logs container_id
或挂载 volume:
-v /host/log:/app/log
pino(快、可靠)winston如果你愿意,可以贴:
我可以直接帮你定位是哪一类问题。