2017-01-15 5 views
0

Недавно у меня возникла идея использования регистрации в nodejs winston. Я начал настраивать его, и он начал расти. Я использую его в моем файле index.js, но он начал становиться большим, а затем я разделял этот файл в модулях. Я хочу также регистрировать события, которые происходят в модулях, но для этого мне нужно будет либо требовать, либо реконфигурировать журнал winston каждый раз, либо вставлять winston logger из index.js в модули. Я думаю, что последний способ лучше, но есть ли лучший способ? Моя идея заключается в: предположим, что Логгин мой настроенный объект протоколирования, вот что я хотел бы сделать в каждом myModule.js:Использование журнала (или другого объекта из index.js) в модулях nodejs

var logging; 
module.exports.injectLog(loggingObject) { 
    this.logging = loggingObject; 
} 
module.exports.someFunctionThatNeedsToBeLogged() { 
//do something 
logging("doing some log"); 
} 

Тогда в index.js я потребовал бы модуль вроде этого:

var myModule = require('./myModule.js').injectLog(loggingObject); 

это хороший подход?

ответ

0

Есть несколько способов добиться того, что вы просите, пара, которая, как я считаю, более чистая, чем то, что вы описываете.

Вы можете предоставить объект зависимости каждому модулю, требующему регистрации при необходимости. Можно даже переместить, что модуль конфигурации, чтобы сохранить index.js чистого

// index.js 
var winston = require('winston'); 
winston.configure({ 
    // config etc etc 
}); 

var deps = { 
    logger: winston 
} 

var someOtherModule = require("./some-other-module")(deps); 


// someOtherModule 
module.exports = function(deps){ 
    var logger = deps.logger; 
    // return your module 
} 

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

Я думаю, что моим предпочтительным способом было бы написать световую обертку вокруг регистратора и потребовать ее там, где это необходимо.

// logger.js 
const winston = require('winston'); 
winston.configure({ 
    // config etc etc 
}); 
module.exports = winston; 


// index.js 
var logger = require("./logger"); 

// some-other-module 
var logger = require("./logger"); 
+0

Не будет ли загрузка регистратора 2 раза? Один, когда мне нужен модуль, который использует регистратор, а другой, когда мне нужен логгер в index.js? – Gatonito

+0

Он должен быть кэширован узлом при первом загрузке. Это должно быть легко проверить, добавив 'console.log ('testing');' after' winston.configure ... ' – leesio