2015-01-15 2 views
0

로깅을 위해 node.js 응용 프로그램을 작성하고 bunyan을 사용하고 있습니다. 내가 뭘하고 싶은지 내 응용 프로그램의 초기화에 bunyan 로거의 한 인스턴스를 만드는 것입니다 그리고 지금부터 나는 로거가 동일한 구성 옵션과 동일한 인스턴스를 얻을 것이다 모든 모듈을 원한다.node.js 응용 프로그램에서 로거를 래핑하기위한 디자인 패턴

// 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

[Common logging for node, express application - best practice?] 가능한 복제본 (http://stackoverflow.com/questions/13766066/common-logging-for-node-express-application-best-practice) –

답변

0

당신은 당신의 정보를(), 디버그(), 경고() 및 오류() 메소드를 걸어 당신의 생성자 함수 모두 같은 로거 행위뿐만 아니라 그 중 떨어져 로거 싱글을 가질 수 있습니다.

// 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() 함수는 실제로 싱글 톤 로거를 생성하지 않습니다. 단지 함수를 생성합니다.