Creating a new listener is very easy. You can set the listener in global, connection or factory level.

<code type="php">
class MyListener extends Doctrine_EventListener {
    public function onLoad(Doctrine_Record $record) {
        print $record->getTable()->getComponentName()." just got loaded!";
    }
    public function onSave(Doctrine_Record $record) {
        print "saved data access object!";
    }
}
class MyListener2 extends Doctrine_EventListener {
    public function onPreUpdate() {
        try {
            $record->set("updated",time());
        } catch(InvalidKeyException $e) { 
        }
    }
}


// setting global listener
$manager = Doctrine_Manager::getInstance();

$manager->setAttribute(Doctrine::ATTR_LISTENER,new MyListener());

// setting connection level listener
$conn = $manager->openConnection($dbh);

$conn->setAttribute(Doctrine::ATTR_LISTENER,new MyListener2());

// setting factory level listener
$table = $conn->getTable("User");

$table->setAttribute(Doctrine::ATTR_LISTENER,new MyListener());
</code>