Here you can see my vision of EventRecorder I've implemented. I've summoned all my mad msPaint skills and hopeing that it looking as well clear as funny. Let me describe how it works:
EventsRecorder subscribed as observer to EventManager. Every income message it push into _eventsQueue. Every iteration of main loop(sync), engine calls EventsRecorder's sync method and all events from queue falling down into the file.
Every iteration of main loop (sync), EventsRecorder clear _eventsQueue and push events from file to events queue. Then push it back into EventManager.
Video of working demo: http://www.youtube.com/watch?v=6AcXYGLH4vE