在 Linux 上运行 JavaScript(Node.js)时“日志不输出”是一个很常见的问题,通常不是代码没执行,而是输出方式、运行环境或终端缓冲导致的。下面按最常见原因逐一说明。
console.log,但标准输出被重定向如果你这样运行:
node app.js > /dev/null
或者:
node app.js > log.txt
那 console.log 不会显示在终端,而是进了文件或黑洞。
✅ 解决:
cat log.txt
或不要重定向。
Node.js 是异步的,如果进程在 console.log 之前就退出了:
setTimeout(() => {
console.log('done')
}, 1000)
process.exit(0) // 立刻退出
✅ 解决:
process.exit()很多日志库(如 winston、pino)默认:
error → stderrinfo → stdout如果你只看了 stdout,就会“以为没日志”。
✅ 检查:
node app.js 2>&1
例如:
nohup node app.js &
日志不会显示在终端。
✅ 查看方式:
tail -f nohup.out
如果是 systemd:
journalctl -u your-service -f
node app.js | tee log.txt
在某些环境下 stdout 是块缓冲,不是行缓冲。
✅ 解决:
stdbuf -oL node app.js
Docker 默认:
✅ 查看:
docker logs -f container_id
node -e "console.log('hello')"
常见坑:
error 才显示)如果你愿意,可以补充:
console.log 还是日志库我可以直接告诉你是哪一条导致的。