2015-10-15 8 views
9

Я смотрел на верхнюю системе регистрации 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. Это способ сделать это, или есть какой-то другой способ?

ответ

6

попробуйте изменить параметр prettyPrint в

prettyPrint: function (object){ 
    return JSON.stringify(object); 
} 
1

Моя рекомендация - написать собственную абстракцию поверх winston, которая имеет удобный способ для печати ваших объектов для отладки.

Вы также можете посмотреть этот ответ, чтобы понять, как этот метод может быть разработан.

https://stackoverflow.com/a/12620543/2211743

3

Используйте встроенную функцию Node.js util.format для преобразования объектов в строки таким же образом, что console.log делает.

3
logger.log("info", "Starting up with config %j", config); 

Winstons использует встроенную библиотеку utils.format. https://nodejs.org/dist/latest/docs/api/util.html#util_util_format_format_args

+0

Предоставьте некоторое объяснение вашему ответу на вопрос, почему это работает так, или что ОП делает неправильно. Просто вставьте эту палочку в код. –

+0

Лучшее решение, которое я видел здесь. Использует существующий logger api и печатает все красиво. –

 Смежные вопросы

  • Нет связанных вопросов^_^