“Linux JS 日志不显示”这个问题比较常见,但原因很多,需要先定位是哪一层没输出。我先给你一个排查清单,你可以逐条对照;如果有具体场景(Node.js / 前端 / PM2 / Docker / Nginx 等),可以再精确分析。
常见情况:
console.log() / console.error() 没输出node app.js > log.txt
或
./start.sh > /dev/null
✅ 解决:
node app.js
node app.js 2>&1 | tee log.txt
Node.js 在 非 TTY 环境下,console.log 是块缓冲,可能不会立刻显示。
✅ 解决方式之一:强制立即刷新
console.log('test')
process.stdout.write('\n')
✅ 或启动 Node 时禁用缓冲:
NODE_ENV=production node --no-warnings app.js
Docker 推荐:
node app.js | cat
很多新手会忽略这一点。
✅ 建议加:
process.on('uncaughtException', e => {
console.error('Uncaught Exception:', e)
})
process.on('unhandledRejection', e => {
console.error('Unhandled Rejection:', e)
})
PM2 不会直接输出到终端
✅ 正确查看方式:
pm2 logs
pm2 logs app-name
或实时:
pm2 logs --lines 100
如果你是在 pm2 start app.js
然后 node app.js 看日志,那当然看不到。
如果你用 systemd 启动 JS:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
✅ 日志要看:
journalctl -u your-service-name -f
某些框架(如 NestJS / Egg / Koa)会过滤日志。
✅ 检查:
LOG_LEVEL=debug
或:
console.error('error log')
比如:
node index.js
但代码在 app.js
✅ 确认:
ps aux | grep node
你可以复制这段测试代码试试:
console.log('stdout test')
console.error('stderr test')
setTimeout(() => {
process.exit(0)
}, 3000)
运行:
node test.js
你可以直接贴出:
我可以一步一步帮你把日志“找回来”。