2012-09-29 2 views
4

이벤트 처리기가 등록되면 다른 모든 등록 된 이벤트 처리기를 기록하는 방법이 있습니까?NodeJS 이벤트 및 이벤트 핸들러 호출을 기록하고 추적하는 방법은 무엇입니까?

방출되는 모든 이벤트와 런타임 중에 이벤트가 방출 될 때 트리거되는 처리기 함수의 이름을 기록하는 방법이 있습니까?

이벤트 핸들러 체인의 리프에서 예외가 발생하면 nodejs 어플리케이션이 체인 이벤트 (다른 ​​이벤트를 트리거하는 하나의 이벤트)를 트리거하고 각 이벤트에 다중 핸들러가있는 경우 stacktrace는 컨텍스트의 전체 정보를 표시하지 않습니다.

이벤트 로그 및 처리기 정보는 이러한 상황에서 매우 유용합니다.

한 hackey 솔루션은 https://github.com/joyent/node/blob/master/lib/events.js에 (조건부) 로깅을 추가하는 것입니다하지만 난 더 나은 방법이있을 확신합니다.

답변

3

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

그것은 이름과 기능을 가진 newListener 이벤트를 방출한다.

다음 단계에서는 events.js를 변경하는 대신 프로토 타입을 펀치합니다. EventEmitter가 필요하면 런타임에이를 monkeypatch 할 수 있습니다. 일반적으로 EventEmitter만큼 중요한 것은 좋지만, 자신의 프로그램을 디버깅하는 것은 좋지 않습니다.

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

다음은, 다른 핸들러 로그 :

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

흠, 멋진 아이디어 : –

+1

https://gist.github.com/bnoordhuis/1555127 – user625488