Подтвердить что ты не робот

Как установить уровень логов в Winston/Node.js

Я использую протоколирование Winston с моим приложением Node.js и определил транспорт файлов. Во всем моем коде я использую logger.error, logger.warn или logger.info.

У меня вопрос, как мне указать уровень журнала? Есть ли файл конфигурации и значение, которое я могу установить, чтобы регистрировались только соответствующие сообщения журнала? Например, я хотел бы, чтобы уровень журнала был "info" в моей среде разработки, но "error" на производстве.

4b9b3361

Ответ 1

Похоже, есть опция уровня в опциях, переданных здесь

Из этого документа:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ level: 'error' }),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

Теперь эти примеры показывают уровень прохождения в объекте option на консольном транспорте. Когда вы используете перенос файлов, я считаю, что вы передадите объект options, который не только содержит путь к файлу, но и уровень.

Это должно привести к чему-то вроде:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
  ]
});

В этом документе обратите внимание также, что с 2.0 он подвергает методу setLevel для изменения во время выполнения. Просмотрите раздел Использование уровней журнала этого документа.

Ответ 2

winston = require('winston');
:
:
winston.level = 'debug';

установит уровень журнала на "debug". (Протестировано с winston 0.7.3)

Ответ 3

В winston есть 6 уровней по умолчанию: глупый = 0 (самый низкий), debug = 1, verbose = 2, info = 3, warn = 4, ошибка = 5 (самая высокая)

При создании транспортеров регистратора вы можете указать уровень журнала, например:

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })

Над кодом будет установлен уровень журнала warn, что означает, что silly, verbose и info не будут выводиться в файл somefile.log, тогда как warn, debug и error будут.

Вы также можете определить свои собственные уровни:

var myCustomLevels = {
  levels: {
    foo: 0,
    bar: 1,
    baz: 2,
    foobar: 3
  }
};

var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });
customLevelLogger.foobar('some foobar level-ed message');

Обратите внимание, что лучше всегда включать 6 предопределенных уровней в свои собственные пользовательские уровни, если где-то используются предопределенные уровни.

Ответ 4

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

var log = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)({ level : 'silly' })
    ]
});

...

// Only messages with level 'info' or higher will be logged after this.
log.transports.Console.level = 'info';

Я думаю, он работает аналогично файлу, но я этого не пробовал.

Ответ 5

Если вы хотите изменить уровень журнала на лету. Например, когда вам нужно отслеживать производственную проблему на короткий промежуток времени; затем вернитесь к уровню журнала ошибок. Вы можете использовать динамический журнал, если вы можете открыть службу в Интернете https://github.com/yannvr/Winston-dynamic-loglevel