2014-10-30 2 views
8

Я работаю над узлом приложения с несколькими модулями. Теперь я пытаюсь правильно настроить ведение журнала (должен был сделать это с самого начала) и посмотрел на использование Bunyan.Рекомендуемый способ применения Bunyan для приложения большого узла?

было бы лучше иметь один logger модуль, который экспортируется, а затем требуемый другими модулями, как это было предложено в this answer или определить новый Бюньян logger экземпляра в каждом модуле непосредственно и настроить его соответствующим образом? Для повторного использования я представляю первое, но я не знаю, будет ли это ограничивать движение вперед.

Если я один регистратор определяется как

var bunyan  = require('bunyan'); 
var logger = bunyan.createLogger({ 
    name: "filter", 
    streams: [ 
     { 
     level: 'info', 
     stream: process.stdout 
     }, 
     { 
     level: 'error', 
     path: '../error.log' 
     }, 
     { 
     level: 'debug', 
     path: '../debug.log' 
     } 
    ] 
}); 

module.exports = logger; 

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

Кроме того, я прав, полагая, что все модули должны регистрировать ошибки в том же файле журнала, например. systemErr.log (чтобы обеспечить лучший обзор) или они должны регистрироваться в своих собственных журналах ошибок, например. module1Err.log, module2Err.log?

ответ

17

было бы лучше иметь один модуль регистратора, который экспортируется, а затем требуемую другими модулями

Да. Чем проще, тем лучше. Также это позволяет избежать повторения шаблонов в журнале.

Кроме того, я прав, полагая, что все модули должны регистрировать ошибки в том же файле журнала, например. systemErr.log (чтобы обеспечить лучший обзор) или они должны регистрироваться в своих собственных журналах ошибок, например. module1Err.log, module2Err.log?

Один файл для всего приложения. Поскольку bunyan использует формат ndjson, достаточно легко фильтровать основной файл журнала, когда вам нужно. Я рекомендую простоту и гибкость ведения журнала непосредственно на stdout и позволяет среде развертывания решать, куда это следует идти. Это также удобно для разработки, где вам, вероятно, не нужны или нужны файлы журналов на диске. Такие инструменты, как upstart и multilog, могут правильно записывать ваши журналы stdout на диск и заботиться о вращении журнала для вас.

Один дополнительный совет. При разработке локально я запускаю мое приложение с чем-то вроде этого:

node-dev --inspect server.js |\ 
    tee -a log/app.ndjson.log | bunyan -o short 
  • node-dev перезагружается автоматически при изменении кода
  • --inspect позволяет отладчик, который я могу прикрепить к хромированному Devtools
  • tee копии STDOUT на диск, поэтому, если я действительно хочу вернуться и просматривать журналы в будущем, я могу, но я не хочу видеть полные записи ndjson в моем терминале
  • bunyan -o short дает мне довольно-pr inted output to my terminal, который я хочу для местного развития.
+1

Начиная с узла 6.3+ вы можете передать флаг '--inspect' вместо' --debug 8011'. узел-инспектор, заложенный в [Chrome DevTools] (https: // medium.ком/@ paul_irish/отладка-узловые-JS-nightlies-с-хром-DevTools-7c4a1b95ae27) –

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