温馨提示×

如何设置Node.js日志的自动清理机制

小樊
53
2025-09-12 04:54:50
栏目: 编程语言

要为Node.js应用程序设置日志自动清理机制,你可以使用一些流行的日志库,如winstonmorgan,它们都支持日志文件的自动清理。这里以winston为例,介绍如何设置日志自动清理机制。

首先,确保你已经安装了winston

npm install winston

接下来,创建一个名为logger.js的文件,并添加以下代码:

const fs = require('fs');
const path = require('path');
const { format, transports } = require('winston');

// 日志文件存储目录
const logDir = path.join(__dirname, 'logs');

// 如果日志目录不存在,则创建
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

// 日志文件名格式
const logFileName = 'app-%DATE%.log';

// 创建一个winston日志记录器
const logger = transports.File({
  filename: path.join(logDir, logFileName),
  level: 'info',
  format: format.combine(
    format.timestamp(),
    format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
});

// 如果是生产环境,则添加日志文件自动清理功能
if (process.env.NODE_ENV === 'production') {
  const { createLogger, format, transports } = require('winston-daily-rotate-file');

  const dailyRotateLogger = createLogger({
    level: 'info',
    format: format.combine(
      format.timestamp(),
      format.printf(({ timestamp, level, message }) => {
        return `${timestamp} ${level}: ${message}`;
      })
    ),
    transports: [
      new transports.DailyRotateFile({
        filename: path.join(logDir, logFileName),
        datePattern: 'YYYY-MM-DD',
        zippedArchive: true,
        maxSize: '20m',
        maxFiles: '14d',
      }),
    ],
  });

  logger.add(dailyRotateLogger);
}

module.exports = logger;

在这个示例中,我们使用了winston-daily-rotate-file库来实现日志文件的自动清理。它会在每天生成一个新的日志文件,并在日志文件达到20MB时进行压缩。同时,它会保留最近14天的日志文件。

要使用这个日志记录器,只需在你的Node.js应用程序中引入它:

const logger = require('./logger');

logger.info('Hello, world!');

现在,你的Node.js应用程序将使用自动清理机制来管理日志文件。

0