在 Linux 上 Node.js 程序“日志为空”通常不是 Node 本身不输出,而是输出去了你看不到的地方或根本没执行到。下面按最常见原因逐一说明,并给出排查方法。
console.log 输出到了 stdout,但被你忽略了Node 默认:
console.log → stdoutconsole.error → stderr如果你是后台运行:
node app.js &
日志不会自动写文件,终端关闭就没了。
✅ 正确方式:
node app.js > app.log 2>&1
nohup / systemd 但没重定向nohup node app.js
默认会写 nohup.out,但如果:
cd 错了目录就可能“看起来为空”。
✅ 明确指定:
nohup node app.js > app.log 2>&1 &
如果你用 systemd:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
日志 不会在文件里,而在:
journalctl -u your-service -f
✅ 查看:
journalctl -u app.service
Node 在:
console.log 大量输出时会启用 块缓冲,程序没退出时你可能看到“空”。
✅ 解决:
const fs = require('fs')
fs.appendFileSync('app.log', 'start\n')
常见情况:
✅ 检查进程:
ps aux | grep node
✅ 前台运行看错误:
node app.js
例如:
但没加 transport / stream。
✅ 示例(winston):
const winston = require('winston')
const logger = winston.createLogger({
transports: [new winston.transports.File({ filename: 'app.log' })]
})
如果你在 Docker 里:
docker logs <container_id>
而不是看文件。
node app.js
node app.js > out.log 2>&1
journalctl -u xxx -f
fs.appendFileSync 验证文件可写console.log如果你愿意,可以贴:
我可以直接帮你定位是哪一种。