2017-01-15 4 views
0

最近、node12sにログインしてwinstonを使用する考えがありました。私はそれを構成し始め、それは成長し始めました。私はindex.jsファイルでそれを使用しますが、それが大きくなってから、そのファイルをモジュールで分けました。私はモジュールで起こったこともログに記録したいが、そのためには毎回winstonログを要求して再設定するか、index.jsからwinston loggerをモジュールに注入する必要があるだろう。私は最後の方法が良いと思いますが、より良い方法がありますか?私の考えは次のとおりです。仮定するlogginは私の設定したログオブジェクトで、ここで私は、各myModule.jsにどうなるのかです:nodejsモジュールでlog(またはindex.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

あなたが求めていることを達成するにはいくつかの方法があります。あなたが説明しているものよりもきれいだと思うカップルです。

ログオンが必要な各モジュールに、依存オブジェクトを提供できます。あなたも、彼らが到着したときに簡単に追加の依存関係を追加することができますこの方法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"); 
+0

私はロガーを2回ロードしませんでしたか? 1つはロガーを使用するモジュールが必要なとき、もう1つはindex.jsでロガーが必要なときですか? – Gatonito

+0

最初にロードされたときにノードによってキャッシュされる必要があります。これは、 'console.log( 'testing');を追加することで簡単に確認できます。' winston.configure ... 'の後に – leesio

関連する問題