Node.js 在 Linux 上“没有日志” 通常不是 Node 本身不输出日志,而是日志去向、运行方式或配置出了问题。下面按常见原因逐一说明,你可以对照排查。
很多生产环境启动方式是:
node app.js > /dev/null 2>&1 &
或 systemd / pm2 / docker 配置中:
> /dev/null2>&1✅ 检查:
ps aux | grep node
看启动命令有没有重定向。
如果你用 PM2:
pm2 start app.js
日志不会直接打到终端,而是在:
pm2 logs
或:
~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log
✅ 正确查看方式:
pm2 logs
pm2 logs app
如果你用 systemd:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
Node 的 console.log 会进 journald,不是文件。
✅ 查看日志:
journalctl -u your-service -f
如果服务里写了:
StandardOutput=null
那就真的没日志了。
很多框架(Express / Nest / Koa)默认不打印请求日志。
例如:
app.get('/', (req, res) => {
res.send('ok')
})
✅ 解决:
console.log('request received')
或使用:
process.on('uncaughtException', () => {})
process.on('unhandledRejection', () => {})
✅ 至少保留:
process.on('uncaughtException', e => console.error(e))
如果你在 Docker 里跑:
docker logs <container_id>
不要进容器里找文件日志。
# 1. 看启动命令
ps aux | grep node
# 2. pm2
pm2 logs
# 3. systemd
journalctl -u 服务名 -f
# 4. docker
docker logs -f 容器名
# 5. 手动测试
node -e "console.log('hello')"
✅ 用日志库(不要只用 console)
npm i pino
✅ 明确输出位置
✅ systemd 推荐配置
StandardOutput=journal
StandardError=journal
如果你愿意,可以把 启动方式(pm2 / systemd / docker / 直接 node)贴出来,我可以直接告诉你日志去哪了。