在 Ubuntu 上导出 Node.js 日志,常见做法取决于你日志是怎么生成的。下面按常见场景给你一套完整方案,从简单到规范。
Node.js 默认日志输出到:
stdout(标准输出)stderr(错误输出)node app.js
日志直接显示在终端。
node app.js > app.log 2>&1
说明:
>:标准输出2>&1:错误也写入同一文件✅ 文件 app.log 就是导出的日志
nohupnohup node app.js > app.log 2>&1 &
查看日志:
tail -f app.log
npm install -g pm2
pm2 start app.js --name my-app
pm2 logs my-app
pm2 logs my-app --lines 100
PM2 默认日志位置:
~/.pm2/logs/
例如:
my-app-out.log
my-app-error.log
pm2 start app.js --name my-app \
--log /var/log/my-app.log \
--error /var/log/my-app-error.log \
--output /var/log/my-app-out.log
sudo vim /etc/systemd/system/node-app.service
内容示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
WorkingDirectory=/home/ubuntu/app
Restart=always
StandardOutput=append:/var/log/node-app.log
StandardError=append:/var/log/node-app-error.log
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app
journalctl -u node-app -f
或:
cat /var/log/node-app.log
const fs = require('fs');
const logStream = fs.createWriteStream('app.log', { flags: 'a' });
console.log = (msg) => {
logStream.write(`[LOG] ${new Date()} - ${msg}\n`);
};
console.error = (msg) => {
logStream.write(`[ERROR] ${new Date()} - ${msg}\n`);
};
docker logs <container_id> > app.log 2>&1
| 场景 | 推荐方案 |
|---|---|
| 本地调试 | console.log |
| 后台运行 | nohup |
| 生产环境 | PM2 |
| 系统级服务 | systemd |
| 长期日志 | 日志文件 + 日志切割 |
sudo apt install logrotate
示例:
/var/log/node-app.log {
daily
rotate 7
compress
missingok
notifempty
}
如果你愿意,可以告诉我:
我可以给你一个完全贴合你项目的导出方案。