Настройка Winston Logger - PullRequest
       67

Настройка Winston Logger

0 голосов
/ 30 апреля 2020

Я создаю приложение Node.js и не могу понять, как правильно настроить Winston Logger.

Что я хотел бы получить:

  • Мое приложение должно иметь 6 пользовательских уровней ведения журнала (фатальный, ошибка, предупреждение, состояние, информация и отладка). Для этих уровней должны быть такие методы, как logger.status (message, ... details).
  • Я хотел бы иметь возможность передавать дополнительные JS объекты (details) после сообщения для отладки / в целях оценки.
  • Журналы должны быть напечатаны на консоли
    • Все выходы консоли должны выглядеть следующим образом: [ISO Date String] [Level in uppercase]: [Log Message]
    • Журналы фатальных ошибок и журналы ошибок должны быть напечатаны красным
    • Журналы отладки и информации должны быть напечатаны, только если константе (например, this.debug, относящейся к моему классу) присвоено значение true. Журналы отладки должны быть напечатаны желтым цветом.
  • Журналы всех уровней должны быть записаны в DailyRotateFile в том же формате, что и выше (за исключением, конечно, цветов).
  • Журналы должны храниться в MongoDB со следующими свойствами: дата, уровень, сообщение, подробности (содержащие все переданные объекты), метка (указывает, из какой части журнала было отправлено, для установки вручную).

Что я сделал до сих пор:

Как рекомендовано, я расширил класс winston по умолчанию, используя TypeScript, чтобы добавить методы для моей спецификации c logging уровни:

import winston = require('winston');

interface Logger extends winston.Logger {
    fatal: winston.LeveledLogMethod;
    error: winston.LeveledLogMethod;
    warning: winston.LeveledLogMethod;
    status: winston.LeveledLogMethod;
    info: winston.LeveledLogMethod;
    debug: winston.LeveledLogMethod;
}

Из этого интерфейса я создал экземпляр, подобный следующему:

this.logger = <Logger>winston.createLogger({
    levels: {
        fatal: 0,
        error: 1,
        warning: 2,
        status: 3,
        info: 4,
        debug: 5
    },
    level: 'debug',
    transports: [
        new winston.transports.Console({

        }),
        new winston.transports.DailyRotateFile({
            filename: 'cplus-%DATE%.log',
            dirname: this.logsDir,
            datePattern: 'YYYY-MM-DD-HH-mm'
        }),
        new winston.transports.MongoDB({
            db: this.dbClient
        })
    ]
});

Basi c вход в консоль и файл с использованием новых методов работает нормально, например,

this.logger.fatal('Connection to database ' + this.dbUrl + ' failed, cannot start', err);

создает следующий вывод:

{"message":"Connection to database mongodb://localhost:27017 failed, cannot startAuthentication failed.","name":"MongooseServerSelectionError","reason": ...

Теперь, как мне получить остальные, такие как форматирование и правильное хранение в MongoDB? Я пробовал несколько разных вещей, используя предустановленные форматы Winston, но безуспешно.

С уважением!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...