4

イベントハンドラーが登録されたときに、他のすべての登録済みイベントハンドラーをログに記録する方法はありますか?

また、発行されたすべてのイベントをログに記録する方法と、実行時にイベントが発行されたときにトリガーされるハンドラー関数の名前はありますか?

nodejs アプリケーションがチェーンされたイベント (1 つのイベントが別の をトリガーする) をトリガーし、各イベントに複数のハンドラーがある場合、event-handler-chain のリーフで例外が発生すると、stacktrace はコンテキストの完全な情報を表示しません。

このような状況では、イベント ログとハンドラー情報が非常に役立ちます。

ハッキーな解決策の 1 つは、(条件付き) ロギングをhttps://github.com/joyent/node/blob/master/lib/events.jsに追加することですが、もっと良い方法があるはずです。

4

1 に答える 1

3

https://github.com/joyent/node/blob/master/lib/events.js#L142-147

newListener名前と機能を持つイベントを発行します。

次に、events.jsを変更するのではなく、プロトタイプをパンチします。EventEmitterが必要になったら、実行時にモンキーパッチを適用できます。これは一般的に悪い習慣であり、特にEventEmitterのような重要なものにとっては悪い習慣ですが、独自のプログラムをデバッグする場合は問題ありません。

(function(){
  var old = EventEmitter.prototype.emit;
  EventEmitter.prototype.emit = ...
)();

次に、他のハンドラーをログに記録します。

console.log(emitter.listeners('eventName'));
于 2012-10-02T06:14:30.740 に答える