在 Linux 环境下使用 Node.js 时,日志清理是常见的运维需求。下面从日志产生方式、清理策略、自动化手段、Node.js 自身实践几个角度系统讲一下。
winstonpinobunyanpm2 logsconst winston = require('winston');
require('winston-daily-rotate-file');
const transport = new winston.transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d', // 保留 14 天
maxSize: '20m', // 单文件最大 20MB
zippedArchive: true
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 优点:
npm i pino pino-roll
const pino = require('pino');
const logger = pino({
transport: {
target: 'pino-roll',
options: {
file: 'logs/app.log',
frequency: 'daily',
maxFiles: 14
}
}
});
示例:/etc/logrotate.d/node-app
/var/www/app/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
参数说明:
daily:每天切rotate 14:保留 14 份compress:压缩旧日志copytruncate:不重启 Node 也能生效✅ 适合 PM2 / 原生 Node 进程
find /var/www/app/logs -name "*.log" -mtime +14 -delete
crontab -e
0 3 * * * find /var/www/app/logs -name "*.log" -mtime +14 -delete
pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 set pm2:log:max-size 10M
pm2 set pm2:log:rotate-interval 1d
pm2 flush
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
console.log 直接写文件logrotate 或日志库自带清理如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置方案。