在 Debian 上压缩 Node.js 日志,常见做法有 手动压缩、定时任务(logrotate)、Node.js 自身日志库配置 三种。下面按实用程度给你一个完整方案。
logrotate(最推荐 ✅)Debian 自带 logrotate,非常适合管理 Node.js 日志。
dpkg -l logrotate
如果没有:
sudo apt update
sudo apt install logrotate
假设你的日志目录是:
/var/log/myapp/
创建配置文件:
sudo nano /etc/logrotate.d/myapp
示例配置(✅ 推荐):
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myuser myuser
copytruncate
}
| 参数 | 作用 |
|---|---|
daily |
每天轮转 |
rotate 7 |
保留 7 份 |
compress |
使用 gzip 压缩 |
delaycompress |
下次轮转再压缩(防止 Node 正在写) |
copytruncate |
不重启 Node 也能生效 |
notifempty |
空文件不处理 |
sudo logrotate -d /etc/logrotate.d/myapp
强制执行一次:
sudo logrotate -f /etc/logrotate.d/myapp
如果你只是想立刻压缩旧日志:
cd /var/log/myapp
gzip *.log
或只压缩 7 天前的:
find . -name "*.log" -mtime +7 -exec gzip {} \;
⚠️ 注意:Node.js 正在写入的日志不要直接 gzip,否则可能丢失数据。
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',
maxSize: '20m',
maxFiles: '14d',
zippedArchive: true
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 自动:
PM2 自带日志管理:
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
✅ 没有 PM2
Node.js + winston + logrotate
✅ 有 PM2
PM2 + pm2-logrotate
使用 copytruncate 或 pm2 reload
如果你愿意,可以告诉我:
我可以帮你写一份 完全可用的配置。