如何清理过期的Node.js日志

438
2025/3/30 3:32:03
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

要清理过期的 Node.js 日志,你可以使用以下方法:

  1. 使用日志轮转(logrotate)工具:

日志轮转是一种自动管理日志文件的方法,它可以定期压缩、删除和创建新的日志文件。在 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。

  1. 使用 Node.js 应用程序内的日志管理库:

有些 Node.js 库提供了日志管理功能,例如 winstonbunyan。这些库通常具有内置的日志轮转功能,可以帮助你自动清理过期的日志。

例如,使用 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 天的日志。

  1. 手动删除过期日志:

如果你不想使用自动轮转工具或库,你可以编写一个简单的脚本来手动删除过期的日志文件。例如,以下是一个使用 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如何实现日志分析