我正在编写node.js应用程序并使用bunyan进行日志记录。我想要做的是在我的应用程序的初始化中创建一个bunyan记录器的实例,从现在开始,我希望每个需要记录器的模块将获得具有相同配置选项的相同实例。
// index.js
var logger = require('./app/utils/logger');
var config = require('./app/config');
config.init().then(function(configData) {
// create the logger instance once
var log = logger({
name: 'appLogger'
level: configData['log.level'],
src: process.env.NODE_ENV === 'development',
streams: [{
path: path.resolve(configData['log.file']),
type: 'file'
}]
});
log.info('logger created');
}).catch(function(err) {
console.log(err)
});
现在我希望我的应用中的每个模块都能获得相同的记录器实例:
// foo.js
var log = require('./app/utils/logger');
log.info('this should be logged in the file that was defined in index.js');
我应该在记录器模块中实现的推荐设计模式是什么?
// logger.js
var bunyan = require('bunyan');
// bunyan.createLogger(options)
// what should be here?
答案 0 :(得分:0)
您可以让您的记录器既可以作为构造函数,也可以作为挂起info(),debug(),warn()和error()方法的记录器单例。
// logger.js
var bunyan = require('bunyan');
// bunyan.createLogger(options)
var name, level, src, streams;
var logger = function(params){
mame = params.name;
level = params.level;
src = params.src;
streams = param.streams;
logger.info = function(msg){
console.log("writing to " + streams.path);
};
// logger.debug = ...
return logger;
};
module.exports = logger;
注意在实际调用记录器函数之前,如何创建info()和其他方法。 logger()函数实际上并不创建单例记录器 - 它只是创建挂起它的函数。