1. 使用系统自带的logrotate工具
logrotate是Debian系统原生支持的日志管理工具,可自动完成Node.js日志的轮转、压缩及清理。配置步骤如下:
sudo apt-get update && sudo apt-get install logrotate;sudo nano /etc/logrotate.d/nodejs;/path/to/your/nodejs/logs/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root adm }daily表示每日轮转,rotate 7保留7个轮转文件,compress启用压缩,delaycompress延迟压缩(避免当天压缩前一天的文件),notifempty为空日志时不轮转,create指定新日志文件的权限与所有者。2. 利用Node.js日志库的内置轮转功能
通过Node.js日志库(如winston、pino)的扩展插件,可实现应用层日志自动管理,无需依赖系统工具:
npm install winston winston-daily-rotate-file,配置示例:const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: '/path/to/logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d' // 保留14天日志
})
]
});
npm install pino pino-rotate,配置示例:const pino = require('pino');
const rotate = require('pino-rotate');
const logger = pino({}, rotate({
period: '1d', // 每日轮转
path: '/path/to/logs/', // 日志目录
limit: 14 // 保留14天
}));
这些配置可实现日志按时间/大小分割、压缩及自动清理。3. 通过cron定时任务定期清理
使用cron设置周期性任务,手动删除旧日志文件(适合不想用logrotate或需要更灵活控制的场景):
crontab -e;0 1 * * * find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;find命令的-mtime +7参数表示查找修改时间超过7天的文件,-exec rm -f {} \;用于删除匹配的文件。4. 编写自定义Node.js清理脚本
通过Node.js的fs模块编写脚本,遍历日志目录并按时间/数量清理旧文件,适合需要定制化清理逻辑的场景:
const fs = require('fs');
const path = require('path');
const logsDir = '/path/to/your/nodejs/logs';
const maxAge = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数
fs.readdir(logsDir, (err, files) => {
if (err) throw err;
files.forEach(file => {
const filePath = path.join(logsDir, file);
fs.stat(filePath, (err, stats) => {
if (err) throw err;
if (stats.isFile() && stats.mtime < Date.now() - maxAge) {
fs.unlink(filePath, err => {
if (err) console.error(`Error deleting ${filePath}:`, err);
else console.log(`Deleted old log: ${filePath}`);
});
}
});
});
});
cleanLogs.js,通过cron或setInterval定期运行(如每天执行一次)。5. 结合第三方日志服务
对于企业级需求,可使用第三方日志服务(如ELK Stack、Papertrail、Loggly)集中管理Node.js日志。这些服务提供自动轮转、压缩、存储及分析功能,无需自行维护日志文件,但可能需要额外成本。