要清理过期的 Node.js 日志,你可以使用以下方法:
日志轮转是一种自动管理日志文件的方法,它可以定期压缩、删除和创建新的日志文件。在 Linux 系统中,logrotate 是一个常用的工具。要配置 logrotate,你需要创建一个名为 /etc/logrotate.d/nodejs
的配置文件,并添加以下内容:
/path/to/your/nodejs/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
这个配置表示每天轮转日志文件,保留最近 7 天的日志,压缩旧日志,如果日志文件丢失则不报错,如果日志文件为空则不轮转,创建新的日志文件时设置权限为 0640。
有些 Node.js 库提供了日志管理功能,例如 winston
和 bunyan
。这些库通常具有内置的日志轮转功能,可以帮助你自动清理过期的日志。
例如,使用 winston
库,你可以这样配置日志轮转:
const winston = require('winston');
const { combine, timestamp, printf } = winston.format;
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
level: 'info',
format: combine(
timestamp(),
printf(({ timestamp, level, message }) => `${timestamp} ${level}: ${message}`)
),
transports: [
new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
这个配置表示每天创建一个新的日志文件,按日期命名,压缩旧日志文件,单个日志文件最大为 20MB,保留最近 14 天的日志。
如果你不想使用自动轮转工具或库,你可以编写一个简单的脚本来手动删除过期的日志文件。例如,以下是一个使用 Node.js 编写的脚本,用于删除指定目录中 7 天前的日志文件:
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
const stat = promisify(fs.stat);
async function deleteOldLogs(logsDir, daysToKeep) {
const now = Date.now();
const cutoff = now - daysToKeep * 86400000;
const logFiles = await readdir(logsDir);
for (const file of logFiles) {
const filePath = path.join(logsDir, file);
const fileInfo = await stat(filePath);
if (fileInfo.isFile() && fileInfo.mtimeMs < cutoff) {
fs.unlink(filePath);
}
}
}
const logsDir = '/path/to/your/nodejs/logs';
const daysToKeep = 7;
deleteOldLogs(logsDir, daysToKeep).catch(console.error);
你可以将此脚本添加到你的项目中,并定期运行它以删除过期的日志文件。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: Ubuntu syslog如何实现日志分析