在nodejs模块中使用log(或index.js中的其他对象)

时间:2017-01-15 05:39:14

标签: javascript node.js logging module

我最近想过在nodejs中使用winston日志记录。我开始配置它,它开始增长。我在我的index.js文件中使用它,但它开始变大,然后我在模块中分离了该文件。我想记录模块中发生的事情,但为此我需要每次都要求并重新配置winston日志,或者将index.js中的winston记录器注入模块中。我认为最后一种方式更好,但有更好的方法吗?我的想法是:假设loggin是我配置的日志记录对象,这是我在每个myModule.js中要做的事情:

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);

这是一个好方法吗?

1 个答案:

答案 0 :(得分: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");