Уинстон: как вращать логи

Как я могу вращать журналы при использовании Winston для обработки журналов для node.js. То есть, как я могу создавать новый файл для каждого дня работы приложения?

    var logger = new (winston.Logger)({
       transports: [
          new (winston.transports.Console)(),
          new (winston.transports.File)({ filename: '2012-07-09.log' })
      ]
});

logger.log('info', 'Test Log Message', { anything: 'This is metadata' });

6 ответов

Решение

Уинстон автор и сопровождающий здесь.

Вход в новый файл каждый день в настоящее время является открытым запросом: https://github.com/flatiron/winston/issues/10. Хотелось бы, чтобы кто-то реализовал это.

Тем не менее, есть и другие варианты:

  1. Транспортный файл принимает параметр maxsize, который будет вращать файл журнала, когда он превышает определенный размер в байтах.

  2. Существует также открытый пул-запрос с новым транспортом, который у меня не было возможности по-настоящему копать в "fileRotate", который, похоже, выполняет такой поворот на основе даты: https://github.com/flatiron/winston/pull/120/files

Функция присутствует, и мы используем ее в производстве, winston.transports.DailyRotateFile:

var timeFormatFn = function() {
    'use strict';
    return moment().format(cfg.timeFormat);
};

var logger = new(winston.Logger)({
    exitOnError: false,
    transports: [
        new(winston.transports.DailyRotateFile)({
            filename: cfg.appLogName,
            dirname: __dirname + '/../' + cfg.logsDirectory,
            datePattern: cfg.rollingDatePattern,
            timestamp: timeFormatFn
        }),
        new(winston.transports.Console)({
            colorize: true,
            timestamp: timeFormatFn
        })
    ]
});

Вы можете использовать следующий код для ежедневного вращения файлов журнала:

var winston = require('winston');
require('winston-daily-rotate-file');
var transport = new (winston.transports.DailyRotateFile)({
    filename: './log',
    datePattern: 'yyyy-MM-dd.',
    prepend: true,
    level: info
});
var logger = new (winston.Logger)({
    transports: [
      transport
    ]
});
logger.info('Hello World!');

По словам автора https://github.com/CycoPH/winston-filerotatedate это:

Транспорт файлов для winston, позволяющий вращать файлы журнала в зависимости от размера и времени.

Транспортный файл принимает имя файла через опцию "имя файла" и использует этот файл в качестве основной цели ведения журнала. Если размер файла превышает максимальный размер байта, текущий файл журнала переименовывается и создается новая основная плитка журнала. Имя переименованного файла журнала форматируется как "basenameYYYYMMDD[az].bak".

Доступные варианты:

  • уровень: уровень сообщений, которые этот транспорт должен регистрировать.
  • silent: логический флаг, указывающий, следует ли подавлять вывод.
  • timestamp: логический флаг, указывающий, следует ли нам добавлять вывод к отметкам времени (по умолчанию true). Если указана функция, вместо меток времени будет использоваться ее возвращаемое значение.
  • filename: имя файла журнала, в который записывается вывод.
  • dirname: папка, в которой будет создан файл журнала.
  • maxsize: максимальный размер в байтах файла журнала, если размер превышен, то создается новый файл.
  • json: если true, сообщения будут регистрироваться как JSON (по умолчанию true).

Другие люди уже дали хорошие ответы на эту проблему. Но тем, кто ищет пример того, как это сделать в более современном синтаксисе JavaScript (ES6 и выше) с использованием winston-daily-rotate-file, может помочь следующий код:

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

const logger = createLogger({
    level: 'info',
    transports: [
      new transports.DailyRotateFile({
         filename: 'info-%DATE%.log',
         datePattern: 'YYYY-MM-DD',
         zippedArchive: true,
         level: 'info'
      })
    ]
});

logger.log('info', 'Test Log Message', { anything: 'This is metadata' });

С 18 декабря 2012 г. эта функция теперь доступна в Winston (см. https://github.com/flatiron/winston/pull/205).

Другие вопросы по тегам