Я смотрел на верхнюю системе регистрации Node: npmlog
, log4js
, bunyan
и winston
и решил использовать winston
за то, что наиболее npm
ежемесячной загрузки.Как записывать объекты JavaScript и массивы в winston в качестве console.log?
Что я хочу настроить, это настраиваемый регистратор, который я смогу использовать в среде разработки с помощью logger.debug(...)
, который не будет регистрировать ничего в производственной среде. Это поможет мне, когда я нахожусь в среде разработки, мне не нужно ничего писать, так как я увижу все результаты.
Это то, что я сейчас:
var level = 'debug';
if (process.env.NODE_ENV !== 'development'){
level = 'production'; // this will never be logged!
}
var logger = new winston.Logger({
transports: [
// some other loggings
new winston.transports.Console({
name: 'debug-console',
level: level,
prettyPrint: true,
handleExceptions: true,
json: false,
colorize: true
})
],
exitOnError: false // don't crush no error
});
Проблема возникает, когда я пытаюсь войти JavaScript Object
или Javascript Array
. С Object
, мне нужно сделать toJSON()
, а для Array
Мне нужно сначала JSON.stringify()
, а затем JSON.parse()
.
Нехорошо писать все эти методы, просто чтобы зарегистрировать что-то, что я хочу. Кроме того, это даже не полезно для ресурсов, потому что эти методы форматирования должны быть выполнены до того, как logger.debug()
понимает, что он находится в процессе производства и что он не должен регистрировать его в первую очередь (в основном, он вычисляет аргументы перед вызовом функции). Мне просто нравится, как old-fashined console.log()
регистрирует объекты JavaScript и массивы.
Теперь, когда я пишу этот вопрос, я обнаружил, что существует способ описания custom format для каждого объекта winston transports
. Это способ сделать это, или есть какой-то другой способ?
Предоставьте некоторое объяснение вашему ответу на вопрос, почему это работает так, или что ОП делает неправильно. Просто вставьте эту палочку в код. –
Лучшее решение, которое я видел здесь. Использует существующий logger api и печатает все красиво. –