【问题标题】:How to log and trace NodeJS Events and Event handlers invocation?如何记录和跟踪 NodeJS 事件和事件处理程序调用?
【发布时间】:2012-09-21 06:33:53
【问题描述】:

当一个事件处理程序被注册时,有没有办法记录所有其他已注册的事件处理程序?

还有什么方法可以记录所有发出的事件,以及在运行时发出事件时触发的处理函数的名称?

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

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

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

【问题讨论】:

    标签: debugging node.js logging event-handling trace


    【解决方案1】:

    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'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多