在 Debian 系统上导出 Node.js 日志,常见做法取决于日志是写到哪里的(stdout、文件、还是 systemd)。下面按常见场景给你一套完整方案。
node app.js > app.log 2>&1
> app.log:标准输出2>&1:错误日志也写入同一文件✅ 适用于临时测试
nohup node app.js > app.log 2>&1 &
查看日志:
tail -f app.log
sudo nano /etc/systemd/system/nodeapp.service
示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/nodeapp
ExecStart=/usr/bin/node /var/www/nodeapp/app.js
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp
查看日志:
journalctl -u nodeapp -f
导出日志:
journalctl -u nodeapp --since "2025-01-01" > nodeapp.log
✅ 这是 Debian 官方推荐方式
const fs = require('fs');
const logStream = fs.createWriteStream('/var/log/nodeapp.log', { flags: 'a' });
process.stdout.write = logStream.write.bind(logStream);
process.stderr.write = logStream.write.bind(logStream);
查看:
tail -f /var/log/nodeapp.log
⚠️ 注意日志轮转(见下文)
npm install -g pm2
pm2 start app.js --name myapp
pm2 logs myapp
pm2 flush # 清空日志
日志位置:
~/.pm2/logs/
✅ 适合开发 / 中小型生产环境
Debian 自带 logrotate
示例:
sudo nano /etc/logrotate.d/nodeapp
/var/log/nodeapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
| 场景 | 推荐方式 |
|---|---|
| 本地测试 | node app.js > log |
| 生产服务 | systemd + journalctl |
| 快速部署 | PM2 |
| 自定义日志 | fs.createWriteStream |
如果你愿意,可以告诉我:
cat /etc/os-release)我可以给你精确到命令级别的方案。