色、名前などの異なるプロパティを持つ、さまざまなレベル (デバッグ、情報、警告など) のカスタム ロガーのプロトタイプを作成しようとしています。
私がやろうとしているのは、これらすべてのレベルを動的に構築し、すべてのプロパティを格納する Hashmap から取得することです。たとえば、、、などのカスタム ロガー オブジェクトがlogger.debug('test')
ありlogger.info('text)
ます。あなたはアイデアを得る。
しかし、私はこの特定のコードに問題があります:
var MyLogger = function(opts) {
this.level = opts.level || 0
this.loggers = {}
var self = this
for (l in LEVELS) {
this.addLogger(l, new loggerOutput(LEVELS[l]))
this[l] = function(message) {
self.getLogger(l).output(message)
}
}
}
問題はself.getLogger(l)にあります。これは常に最後のロガー (エラー) を指しているためです。変数を静的文字列に置き換えると機能します: self.getLogger('info')
回避策は、すべてのロガーを手動でプロトタイプ化することです。明らかにそれは機能しますが、より良い解決策を見つけることを期待していました。
MyLogger.prototype = {
debug: function(message) {
this.getLogger('debug').output(message)
},
info: function(message) {
this.getLogger('info').output(message)
}
...
}
前もって感謝します。