Linux 下 Node.js 日志“丢失”是很常见的问题,通常不是真的没了,而是没写到你以为的地方,或者被系统/进程机制吞掉了。下面按最常见原因逐一说明,并给出排查和解决办法。
Node.js 默认:
console.log → stdoutconsole.error → stderr如果你是直接运行:
node app.js
日志只在当前终端显示,关闭终端就没了。
✅ 解决:
node app.js > app.log 2>&1
PM2 默认日志在:
~/.pm2/logs/
查看:
pm2 logs
pm2 logs app
常见误区:
console.log 会写文件(不会)pm2 restart如果你用:
[Service]
ExecStart=/usr/bin/node /app/app.js
日志在:
journalctl -u your-service
✅ 查看:
journalctl -u node-app -f
Linux 常用 logrotate:
检查:
ls -lh /var/log/
cat /etc/logrotate.d/node
✅ 解决:
logrotate 配置Node.js 是异步写日志,如果:
process.exit()kill -9缓冲区日志会丢。
✅ 解决:
winston / pinoprocess.exit(0) 立即退出process.on('exit', () => {})
例如:
✅ 建议:
如果你在 Docker 里:
docker logs container
但:
none✅ 检查:
docker inspect container | grep LogConfig
✅ 检查:
ls -ld /var/log/app
touch /var/log/app/test
示例(pino):
const pino = require('pino')
const logger = pino()
logger.info('server started')
console.log 还是日志库?如果你愿意,可以直接告诉我:
我可以帮你精准定位。