Как установить уровень логов в Winston/Node.js
Я использую протоколирование Winston с моим приложением Node.js и определил транспорт файлов. Во всем моем коде я использую logger.error
, logger.warn
или logger.info
.
У меня вопрос, как мне указать уровень журнала? Есть ли файл конфигурации и значение, которое я могу установить, чтобы регистрировались только соответствующие сообщения журнала? Например, я хотел бы, чтобы уровень журнала был "info" в моей среде разработки, но "error" на производстве.
Ответы
Ответ 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