Debian环境下Node.js日志清理与轮转实用技巧
一 系统级方案 logrotate
/path/to/your/nodejs/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
size 100M
}
常用指令说明:
二 进程管理工具 PM2 内置日志管理
module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
out_file: '/var/log/myapp/out.log',
error_file: '/var/log/myapp/err.log',
log_date_format: 'YYYY-MM-DD HH:mm Z',
time: true,
merge_logs: true,
max_size: '10M',
retain: 7
}]
};
说明:max_size 控制单文件大小,retain 控制保留份数;PM2 也提供 pm2 logrotate 插件用于更细粒度策略。三 应用内日志库轮转
const winston = require('winston');
const { createLogger, format, transports } = winston;
const { combine, timestamp, printf } = format;
const myFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
});
const logger = createLogger({
level: 'info',
format: combine(timestamp(), myFormat),
transports: [
new transports.File({
filename: 'app.log',
maxsize: 10 * 1024 * 1024, // 10MB
maxFiles: 7
})
]
});
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({ level: 'info', transports: [transport] });
四 定时任务与脚本清理
0 0 * * * find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -delete
五 实践建议与注意事项