在 Debian 上运行 Node.js 没有日志,通常不是 Node.js 本身的问题,而是运行方式、systemd、日志重定向或应用代码导致的。下面按常见原因逐一说明,并给出排查方法。
Node.js 默认只输出到 stdout / stderr,如果你没有写日志代码,自然什么都没有。
常见情况:
console.log✅ 检查方式:
console.log('app start')
在 Debian 上,Node.js 通常通过 systemd 管理。
很多人以为 Node.js 会“自动写日志文件”,其实 systemd 默认不写文件。
✅ 正确查看方式:
journalctl -u your-node-service.service -f
常见 service 示例:
[Service]
ExecStart=/usr/bin/node /opt/app/index.js
Restart=always
✅ 如果看到日志,说明 Node 有输出,只是你没找对地方。
某些启动方式会“吃掉”日志:
node app.js > /dev/null 2>&1
或:
nohup node app.js &
✅ 检查:
如果你用 PM2:
pm2 logs
或:
pm2 logs app-name
PM2 默认日志位置:
~/.pm2/logs/
Debian 自带 Node.js 可能较旧,但不会导致完全无日志。
✅ 查看版本:
node -v
✅ 建议使用:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
某些 systemd 配置会禁用输出:
StandardOutput=null
StandardError=null
✅ 正确配置:
StandardOutput=journal
StandardError=journal
[Unit]
Description=Node.js App
[Service]
ExecStart=/usr/bin/node /opt/app/index.js
Restart=always
User=node
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
查看日志:
journalctl -u node-app -f
const fs = require('fs');
const log = fs.createWriteStream('/var/log/node-app.log', { flags: 'a' });
console.log = (...args) => {
log.write(`[LOG] ${args.join(' ')}\n`);
};
| 检查项 | 命令 |
|---|---|
| Node 是否运行 | `ps aux |
| systemd 日志 | journalctl -u xxx -f |
| PM2 日志 | pm2 logs |
| stdout 是否被丢弃 | 检查启动脚本 |
| 应用是否输出 | console.log 测试 |
你可以直接贴出:
我可以精准定位为什么“完全没日志”。