如何logging和跟踪NodeJS事件和事件处理程序的调用?

当事件处理程序获得注册时,有没有办法logging所有其他注册的事件处理程序?

还有什么办法可以logging所有发出的事件,以及在运行时发生事件时触发的处理函数的名字吗?

如果nodejs应用程序触发链式事件(一个事件触发另一个事件),并且每个事件都有多个处理程序,则当event-handler-chain的叶子发生exception时,stacktrace不会显示上下文的完整信息。

事件日志和处理程序信息在这种情况下非常有用。

一个hackey解决scheme是添加(条件)日志logging到https://github.com/joyent/node/blob/master/lib/events.js,但我相信肯定有一个更好的方法。

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

它用名称和函数发出一个newListener事件。

接下来,而不是改变events.js,打出原型。 一旦你需要EventEmitter,你可以在运行时对其进行修改。 这通常是不好的做法,特别是对于像EventEmitter这样重要的东西,但是对于debugging你自己的程序来说,这是很好的做法。

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

接下来,logging其他处理程序:

 console.log(emitter.listeners('eventName'));