<?php?>Doctrine_Db has a pluggable event listener architecture. It provides before and afterlisteners for all relevant methods. Every listener method takes one parameter: a Doctrine_Db_Event object, whichholds info about the occurred event.<br\><br\>Every listener object must either implement the Doctrine_Db_EventListener_Interface or Doctrine_Overloadable interface. Using Doctrine_Overloadable interfaceonly requires you to implement __call() which is then used for listening all the events. <br\><br\><?php$str="<?phpclass OutputLogger extends Doctrine_Overloadable { public function __call(\$m, \$a) { print \$m . ' called!'; }}?>";renderCode($str);?><br\><br\>For convienceyou may want to make your listener class extend Doctrine_Db_EventListener which has empty listener methods, hence allowing you not to defineall the listener methods by hand. The following listener, 'MyLogger', is used for listening only onPreQuery and onQuery methods.<br\><br\><?php$str="<?phpclass MyLogger extends Doctrine_Db_EventListener { public function onPreQuery(Doctrine_Db_Event \$event) { print 'database is going to be queried!'; } public function onQuery(Doctrine_Db_Event \$event) { print 'executed: ' . \$event->getQuery(); }}?>";renderCode($str);?><br\><br\>Now the next thing we need to do is bind the eventlistener objects to our database handler.<br\><br\>