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

Javascript 在nodejs模块中使用日志(或index.js中的其他对象),javascript,node.js,logging,module,Javascript,Node.js,Logging,Module,我最近有了使用winston登录nodejs的想法。我开始配置它,它开始增长。我在index.js文件中使用它,但它开始变大,然后我将该文件分为多个模块。我也想记录模块中发生的事情,但为此,我需要每次都需要并重新配置winston日志,或者将index.js中的winston logger注入模块中。我认为最后一种方法更好,但是有更好的方法吗?我的想法是:假设loggin是我配置的日志对象,下面是我将在每个myModule.js中执行的操作: var logging; module.export

我最近有了使用
winston
登录nodejs的想法。我开始配置它,它开始增长。我在index.js文件中使用它,但它开始变大,然后我将该文件分为多个模块。我也想记录模块中发生的事情,但为此,我需要每次都需要并重新配置winston日志,或者将index.js中的winston logger注入模块中。我认为最后一种方法更好,但是有更好的方法吗?我的想法是:假设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);

这是一个好方法吗?

有几种方法可以实现你的要求,我认为这两种方法比你描述的更干净

当需要日志记录时,您可以为每个需要日志记录的模块提供一个依赖项对象。您甚至可以将其移动到配置模块以保持
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");

我不是要加载两次记录器吗?一个是当我需要使用记录器的模块时,另一个是当我需要index.js中的记录器时?它应该在第一次加载时由节点缓存。这应该很容易通过添加
console.log(“测试”)来验证温斯顿之后。配置…