Node.js 日志“不输出”是一个比较常见的问题,原因通常和运行方式、日志级别、输出目标、异步缓冲、框架配置有关。下面按常见原因逐一说明,并给出排查方法。
console.log 还是日志库?console.log 但没看到常见原因:
console.log('start');
process.exit(0); // 日志可能来不及 flush
✅ 解决:去掉 process.exit,或用 process.exitCode
setTimeout(() => {
console.log('hello');
}, 1000);
// 如果没有其他事件循环,可能已退出
console.error('error log');
console.log → stdoutconsole.error → stderr✅ 检查方式:
node app.js 1>/dev/null # 只看 stderr
node app.js 2>/dev/null # 只看 stdout
const winston = require('winston');
const logger = winston.createLogger({}); // ❌ 没 transport
logger.info('test'); // 不会输出
✅ 正确:
winston.createLogger({
transports: [new winston.transports.Console()]
});
logger.level = 'error';
logger.info('debug info'); // ❌ 不输出
✅ 级别顺序(从低到高):
debug < info < warn < error
console.log 但被缓冲✅ 解决:
node -e "setInterval(()=>console.log('alive'),1000)"
或在 Dockerfile:
ENV NODE_ENV=production
PM2 用户:
pm2 logs
const x = y + 1; // ReferenceError
console.log('never run');
✅ 解决:
node app.js
看是否有报错堆栈
Logger你可以按顺序排查:
console.log('test') 最前面测试node app.js 运行如果你愿意,可以把:
发出来,我可以帮你精准定位是哪一条原因。