Winston javascript logger создает два отдельных файла журнала. Как мне записать все записи в один файл? - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь использовать Winston и winston-daily-rotate-file , чтобы записать все выходные данные моей консоли / журнала с сервера node.js в один файл, который будет (надеюсь) меняются ежедневно в полночь.

Проблема, с которой я сталкиваюсь, заключается в том, что необработанные исключения создают новый файл журнала, а не записывают его в существующий. Смотрите пример кода ниже для поведения дублирования. Как мне получить весь вывод, который будет сохранен в одном лог-файле, а также вывод на консоль? В настоящее время консольная сторона выглядит хорошо, но вы можете указать на что-то очевидное, что я ' м отсутствует.

  • ОС: Win 10
  • узел: v12.16.0
  • npm: v6.13.4
  • winston: v3. 2.1
  • winston-daily-rotate-file: v4.4.2
    const winston = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    const path = require('path');

    var logger = new (winston.createLogger)({
        transports: [
            new (winston.transports.Console)({
                format: winston.format.combine(
                    winston.format.timestamp(),
                    winston.format.colorize({ all: true }),
                    winston.format.printf((info) => {
                        const {
                            timestamp, level, message
                        } = info;
                        return `${timestamp} - ${level}: ${message}`;
                    }),
                ),
                handleExceptions: true
             }),
            new DailyRotateFile({
                name: 'file',
                datePattern: 'YYYY-MM-DDTHH-mm-ss',
                handleExceptions: true,
                format: winston.format.combine(
                    winston.format.timestamp(),
                    winston.format.printf((info) => {
                        const {
                            timestamp, level, message
                        } = info;
                        return `${timestamp} - ${level}: ${message}`;
                    }),
                ),
                filename: path.join(__dirname, 'logs', '%DATE%.log')
            }),
        ]
    });

    logger.info("This is an info message");
    logger.error("This is an error message");
    setTimeout(() => {throw new Error('oh dear!')}, 5000);

1 Ответ

0 голосов
/ 13 февраля 2020

Моя проблема была вызвана параметром datePattern. winston-daily-rotate-file использует этот шаблон для определения частоты вращения файла. Поскольку я включил секунды в шаблон, он искал файл с текущей меткой времени (с точностью до секунды) и создавал его перед записью в файл.

Чтобы получить ежедневные файлы, мне просто нужно было изменить

datePattern: 'YYYY-MM-DDTHH-mm-ss'

до

datePattern: 'YYYY-MM-DD'
...