在 Ubuntu 上设置 Node.js 日志,常见做法有 系统级日志(systemd / journald)、应用内日志(Winston / Pino)、以及 日志文件 + 轮转(logrotate)。下面按使用场景给你一套完整方案。
Node.js 默认会把日志输出到 stdout / stderr:
console.log('info');
console.error('error');
在 Ubuntu 上运行:
node app.js > app.log 2>&1
⚠️ 缺点:进程重启、崩溃时日志容易丢失。
sudo nano /etc/systemd/system/nodeapp.service
内容示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
Restart=always
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp
journalctl -u nodeapp -f
✅ 优点:
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('应用启动');
logger.error('出错了');
日志文件位置:
/home/ubuntu/app/combined.log
Ubuntu 自带 logrotate,防止日志把磁盘写满。
sudo nano /etc/logrotate.d/nodeapp
示例:
/home/ubuntu/app/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
sudo logrotate -d /etc/logrotate.d/nodeapp
pm2 logs
pm2 logs app --lines 100
pm2 start app.js --log /var/log/nodeapp.log
PM2 自带日志管理,但生产环境更推荐 systemd + journald。
✅ 生产环境
systemd + journald + Winston + logrotate
✅ 开发环境
console.log / Winston
winston.format.timestamp()
如果你愿意,可以告诉我:
我可以直接给你一套可复制的完整配置。