2

node.js アプリケーションを作成しており、ロギングにbunyanを使用しています。私がやりたいことは、アプリの初期化で bunyan ロガーの 1 つのインスタンスを作成することです。これからは、ロガーを必要とするすべてのモジュールが同じ構成オプションで同じインスタンスを取得するようにします。

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

1 に答える 1

1

ロガーをコンストラクター関数と、info()、debug()、warn()、および error() メソッドをハングするロガー シングルトンの両方として機能させることができます。

// logger.js
var bunyan = require('bunyan');
// bunyan.createLogger(options)

var name, level, src, streams;

var logger = function(params){
    name = params.name;
    level = params.level;
    src = params.src;
    streams = params.streams;

    logger.info = function(msg){
        console.log("writing to " + streams.path);
    };
    // logger.debug = ...

    return logger;
};

module.exports = logger;

実際にロガー関数を呼び出すまで、info() およびその他のメソッドが作成されないことに注意してください。logger() 関数は実際にはシングルトン ロガーを作成しません。

于 2015-01-17T08:10:15.243 に答える