Linux下Node.js日志清理的主要策略
logrotate是Linux系统自带的日志管理工具,支持自动轮转、压缩、删除和邮寄日志文件,无需修改应用代码,适合大多数场景。
sudo apt-get install logrotatesudo yum install logrotate/etc/logrotate.d/目录下创建Node.js专用配置文件(如nodejs),内容示例如下:/path/to/your/nodejs/logs/*.log {
daily # 每天轮转一次(可选:weekly/monthly)
missingok # 日志文件不存在时不报错
rotate 7 # 保留最近7个轮转文件
compress # 压缩旧日志(节省空间)
notifempty # 日志为空时不轮转
create 0640 root adm # 新建日志文件权限及属主(根据实际调整)
}
sudo logrotate -f /etc/logrotate.d/nodejs。若不想依赖logrotate,可通过cron定时执行find命令清理旧日志,适合需要灵活控制清理频率的场景。
crontab -e添加以下内容(每天凌晨0点清理7天前的.log文件):0 0 * * * find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;
0 0 * * *:每天00:00执行;-mtime +7:匹配7天前修改过的文件;-exec rm -f {} \;:删除匹配的文件。若应用使用winston或pino等日志库,可直接通过其插件实现日志轮转,适合需要细粒度控制(如按文件大小、时间分割)的场景。
npm install winston winston-daily-rotate-file;const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: '/path/to/logs/application-%DATE%.log', // 日志文件名模板(%DATE%会被替换为日期)
datePattern: 'YYYY-MM-DD', // 日期格式(每天一个文件)
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个文件最大20MB(超过则轮转)
maxFiles: '14d' // 保留14天内的日志
});
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [transport]
});
npm install pino pino-rotate;const pino = require('pino');
const rotate = require('pino-rotate');
const logger = pino();
rotate({
period: '1d', // 每天轮转一次
path: '/path/to/logs', // 日志目录
maxFiles: 7, // 保留7个文件
gzip: true // 压缩旧日志
});