如何在特定日期限制后从winston日志中删除文件?

时间:2016-07-08 18:27:08

标签: node.js winston

我正在使用winston将文件记录到服务器中,按预期工作,现在我想设置天数限制,让我们说3天后我想要删除3天前记录的文件,是否可以实现使用winston轮换?

main.js

 winston.add(winston.transports.File, {
        filename: './Logs/server.log',
        maxsize:'15000',
        timestamp:false
    });

2 个答案:

答案 0 :(得分:0)

您可以使用Winston daily rotate

简短的回答:是的,您可以通过在maxFiles:3d选项中添加transport来实现。

  • 如果未设置maxFiles,则不会删除任何日志文件。

  • 如果设置maxFiles:3d,它将删除最近3天创建的所有日志文件。

  • 如果您设置maxFiles:3,当它超过3个时,它将删除日志文件。

注意:可以在使用zippedArchive: true进行删除之前对文件进行归档,如果未设置,则日志文件将被删除而不进行任何备份。到现在为止,我还没有办法自动删除zip文件。

样品设置:

  require('winston-daily-rotate-file');

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

  transport.on('rotate', function(oldFilename, newFilename) {
    // do something fun
  });

  var logger = winston.createLogger({
    transports: [
      transport
    ]
  });

  logger.info('Hello World!');```


答案 1 :(得分:0)

我花了几个小时试图了解日志轮换的工作方式。至少Winston-daily-rotate-file版本3.10.0使用file-stream-rotator进行文件旋转。我发现可以使用以下选项:

    const options = (level: string) => ({
      name: `${level}-log`,
      filename: `${APP_NAME}.${level}.%DATE%.log`,
      dirname: CONFIG.logDir,
      datePattern: 'YYYY-MM-DD',
      maxFiles: '1d',
      auditFile: `${CONFIG.logDir}/${APP_NAME}.${level}-audit.json`,
      level,
    })

    new winston.transports.DailyRotateFile(options('error'))

这使Winston可以按应用程序和日志记录级别创建audit.json文件。如果不指定auditFile选项,则最终会生成生成的审计文件名,该文件名由options的哈希值组成,每当更改选项时,哈希文件名就会更改。如果更改选项,则审核文件名将更改,并且Winston无法在更改选项之前删除文件。

我认为,使用审核文件不是一个好方法。最好从日志文件名中解析时间戳而无需任何额外的文件。例如,您不能将日志轮换添加到现有应用程序中,而不能让Winston删除在配置Winston日志轮换之前创建的日志文件。