Nodejs日志轮转模块winston-daily-rotate-file的使用

Nodejs日志轮转模块winston-daily-rotate-file的使用
winston-daily-rotate-file 是一个非常有用的 Node.js 日志轮转模块,它可以帮助你管理日志文件,确保它们不会无限增长。下面是如何使用 winston-daily-rotate-file 的基本步骤:

安装

首先,你需要安装 winstonwinston-daily-rotate-file 模块。你可以使用 npm 或 yarn 来安装:

npm install winston winston-daily-rotate-file

或者

yarn add winston winston-daily-rotate-file

基本使用

接下来,我们创建一个简单的示例来展示如何使用 winston-daily-rotate-file

const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

// 创建一个日志格式化器
const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
  ),
  // 使用 DailyRotateFile 进行日志轮转
  transports: [
    new DailyRotateFile({
      filename: 'application-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d',
      // 日志级别过滤
      level: 'info'
    })
  ]
});

// 记录一些信息
logger.info('这是测试信息');
logger.error('这是测试错误');

参数说明

  • filename: 日志文件的基础名称。
  • datePattern: 日期模式,用于在文件名中添加日期。
  • zippedArchive: 是否压缩旧的日志文件。
  • maxSize: 单个日志文件的最大大小。
  • maxFiles: 保留的最大日志文件数量。
  • level: 控制哪些级别的日志会被写入到这个特定的传输中。

配置多个日志级别

如果你希望为不同的日志级别配置不同的日志文件,可以这样做:

const logger = createLogger({
  transports: [
    new DailyRotateFile({
      filename: 'logs/error-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d',
      level: 'error' // 只记录 error 级别的日志
    }),
    new DailyRotateFile({
      filename: 'logs/combined-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d',
      level: 'info' // 记录 info 和更高级别的日志
    })
  ]
});

这样,你可以将不同级别的日志分开存储,便于管理和分析。

通过这些配置,你可以有效地管理和维护你的应用日志,而不需要担心日志文件变得过大。


3 回复

当然,使用winston-daily-rotate-file可以让您的Node.js应用像每天定时更新的报纸一样,拥有新鲜的日志文件。首先,确保安装了winstonwinston-daily-rotate-file

npm install winston winston-daily-rotate-file

然后,你可以这样配置它:

const { createLogger, transports } = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');

const logger = createLogger({
  transports: [
    new DailyRotateFile({
      filename: 'application-%DATE%.log',
      datePattern: 'YYYY-MM-DD-HH',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});

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

这样,你的日志就会每天生成一个新的文件,并且会自动压缩超过14天的日志文件。是不是感觉既环保又高效呢?


winston-daily-rotate-file 是一个非常实用的 Node.js 日志管理模块,它能够帮助你根据时间或者文件大小来自动轮转日志文件。下面是关于如何使用 winston-daily-rotate-file 的详细步骤。

首先,你需要安装必要的依赖包:

npm install winston winston-daily-rotate-file

接下来,你可以创建一个简单的日志配置,使用 DailyRotateFile 转运器来实现日志文件的轮转。下面是一个基本的示例:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, printf } = format;

// 自定义日志格式
const myFormat = printf(info => {
  return `${info.timestamp} ${info.level}: ${info.message}`;
});

const logger = createLogger({
  // 使用自定义格式
  format: combine(
    timestamp(),
    myFormat
  ),
  // 指定日志存储的位置
  transports: [
    new (require('winston-daily-rotate-file'))({
      filename: 'application-%DATE%.log',
      datePattern: 'YYYY-MM-DD-HH',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});

// 如果不是生产环境,将日志打印到控制台
if (process.env.NODE_ENV !== 'production') {
  logger.add(new transports.Console({
    format: combine(
      timestamp(),
      myFormat
    )
  }));
}

module.exports = logger;

在这个示例中,我们首先导入了 winstonwinston-daily-rotate-file。然后我们定义了一个自定义的日志格式 myFormat,它可以让你的日志输出看起来更加清晰和一致。接着我们创建了一个 logger 对象,并添加了一个 DailyRotateFile 转运器,它会根据日期和时间来轮转日志文件。如果你的应用不是运行在生产环境中,我们会添加一个控制台运输器来输出日志信息。

这样设置后,日志文件将每天生成一个新的文件,旧的日志文件会被压缩并保存最多14天。通过调整 filename, datePattern, zippedArchive, maxSize, 和 maxFiles 参数,你可以根据自己的需求定制日志文件的管理策略。

winston-daily-rotate-file 是一个用于 Node.js 的日志轮转模块,常与 winston 日志库一起使用。使用步骤如下:

  1. 安装依赖:npm install winston winston-daily-rotate-file

  2. 引入模块:

    const { createLogger, transports } = require('winston');
    const { DailyRotateFile } = require('winston-daily-rotate-file');
    
  3. 配置并创建日志实例:

    const logger = createLogger({
      transports: [
        new DailyRotateFile({
          filename: 'application-%DATE%.log',
          datePattern: 'YYYY-MM-DD',
          zippedArchive: true,
          maxSize: '20m',
          maxFiles: '14d'
        })
      ]
    });
    
  4. 使用日志实例记录信息:

    logger.info('This is an info message');
    

这样可以确保每天生成一个新的日志文件,并且旧的日志文件会被压缩和清理。

回到顶部