在 Linux 下压缩 Node.js 日志,常见做法有 手动压缩、定时自动压缩、日志库自带轮转 三种。下面按实用程度给你一个完整方案。
logrotate 自动压缩这是 生产环境最推荐 的方式。
which logrotate
sudo vim /etc/logrotate.d/nodejs
示例配置:
/var/log/nodejs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 node node
copytruncate
}
| 参数 | 作用 |
|---|---|
| daily | 每天轮转 |
| rotate 7 | 保留 7 份 |
| compress | 用 gzip 压缩 |
| delaycompress | 下次再压缩(防止正在写) |
| copytruncate | 不重启 Node.js |
| missingok | 日志不存在不报错 |
✅ 优点
gzip app.log
或批量压缩:
gzip *.log
解压:
gunzip app.log.gz
⚠️ 风险:Node.js 可能还在写文件,建议先停服务或 copytruncate
npm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d',
zippedArchive: true // ✅ 自动 gzip
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 自动:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:retain 7
✅ 自动压缩 + 轮转
查看日志大小:
du -sh /var/log/nodejs
清理旧日志:
find /var/log/nodejs -name "*.gz" -mtime +30 -delete
| 场景 | 推荐方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| PM2 | ✅ pm2-logrotate |
| 自定义日志 | ✅ Winston + rotate |
| 临时处理 | gzip |
如果你愿意,可以告诉我:
我可以 直接帮你写一份可用的配置文件。