在 Ubuntu 上让 Node.js 日志实现“轮转(rotate)”,常见有几种方式,从最简单到最规范给你列一下。
logrotate(无需改代码)node app.js >> /var/log/myapp/app.log 2>&1
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
daily:每天轮转rotate 14:保留 14 份compress:压缩旧日志copytruncate:不重启 Node.js 也能生效(很重要)sudo logrotate -d /etc/logrotate.d/myapp # 模拟
sudo logrotate -f /etc/logrotate.d/myapp # 强制执行
✅ 优点:稳定、系统级、不改业务代码
✅ 适合:生产环境
winston + winston-daily-rotate-filenpm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
dirname: '/var/log/myapp',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d',
zippedArchive: true
});
const logger = winston.createLogger({
transports: [transport]
});
logger.info('hello');
✅ 自动按天切
✅ 自动压缩
❌ 需要改代码
PM2 自带日志管理:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
✅ 简单
✅ 适合 PM2 用户
log4jsnpm install log4js
支持 DateFileAppender,但配置稍复杂。
| 场景 | 推荐方案 |
|---|---|
| 生产服务器 | ✅ logrotate |
| 不想动系统 | winston-daily-rotate-file |
| 用 PM2 | pm2-logrotate |
| Docker | 容器外 logrotate 或 logging driver |
如果你愿意,可以告诉我:
我可以给你 完全可复制的配置。