簡體   English   中英

在Node.js模塊中使用日志(或index.js中的其他對象)

[英]Using log (or other object from index.js) in nodejs modules

我最近使用過的想法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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM