Node.js 日志不输出,通常不是“日志没产生”,而是输出目标、进程状态或运行环境导致你没看到。下面按最常见原因 → 排查方法给你一个系统清单。
Node.js 默认:
console.log → stdoutconsole.error → stderr常见误区
✅ 验证:
console.log('stdout test');
console.error('stderr test');
本地直接运行:
node app.js
PM2 不会直接输出到终端
✅ 查看日志:
pm2 logs
pm2 logs app-name
或直接看文件:
~/.pm2/logs/
✅ 实时查看:
pm2 logs --lines 100
console.log 在 Docker 里是标准输出
✅ 查看:
docker logs 容器ID
docker logs -f 容器ID
⚠️ 如果你把日志写文件,但没挂载 volume,也会“消失”
console.log('start');
process.exit(0);
✅ 正确方式:
console.log('start');
setTimeout(() => {
process.exit(0);
}, 100);
或:
process.on('exit', () => {
console.log('exit');
});
例如 Winston:
logger.info('info msg'); // 没输出
可能原因:
warn✅ 检查:
logger.level = 'info';
✅ 确保有 transport:
new winston.transports.Console()
> output.log 重定向了 stdout2> 重定向了 stderrnohup 后台运行✅ 排查:
node app.js > out.log 2>&1
tail -f out.log
if (false) {
console.log('不会执行');
}
✅ 加断点或:
console.trace('here');
✅ 你用的是:
console.logwinston / pinopm2dockerprocess.exit✅ 日志是否:
setInterval(() => {
console.log(new Date().toISOString(), 'heartbeat');
}, 1000);
如果这都不输出,说明是运行环境问题,不是代码问题。
你可以直接贴:
我可以精确告诉你是哪一条原因。