我最近想过在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);
这是一个好方法吗?
答案 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");