PHP Extending PDO Class
This mostly looks good to me. 
I don't think that logging exceptions should be the concern of your rDB class. Also, you could utilize the PSR logger interface

class rDB extends PDO implements \Psr\Log\LoggerAwareInterface
{
    //do not override the PDO constructor

    public function setLogger(\Psr\Log\LoggerInterface $logger)
    {
        $this-&gt;logger = $logger;
    }

    //override the PDO methods as you have done but, call
    //$this-&gt;log() instead of $this-&gt;logger-&gt;log()
    //i.e.
    public function prepare($statement, $driver_options = array())
    {
        $this-&gt;log(\Psr\Log\LogLevel::INFO, $statement, array(
          'driver_options' =&gt; $driver_options
        ));
        return parent::prepare($statement, $driver_options);
    }

    private function log($level, $message, $context = array())
    {
        //note: only log if a logger is set
        if ($this-&gt;logger) {
            $this-&gt;logger($level, $message, $context);
        }
    }
}


A factory method added to your rDb class could be useful to construct an instance for you:

public static function createInstance($params)
{
    $dsn = array_key_exists('dsn', $params) ? $params['dsn']: null;
    $user = array_key_exists('user', $params) ? $params['user'] : null;
    $pass = array_key_exists('pass', $params) ? $params['pass']: null;
    $logger = array_key_exists('logger', $params) ? $params['logger']: null;

    $rdb = new rDB($dsn, $user, $pass);
    $rdb-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if ($logger) {
        $rdb-&gt;setLogger($logger);
    }

    return $rdb;
}


EDIT
I suggest using a factory method to construct your instance instead of overriding the constructor primarily because 1) Changing the argument list in any overridden method effectively changes the interface. This makes it more difficult to replace one class with another. 2) I feel that constructors should do no more than serve as a way to inject dependencies that are always needed and initialize default values.

In your application, somewhere during initialization/bootstrap:

//Depending on your environment (production, development, etc),
//you can configure different kinds of loggers. For example,
//a development logger would probably log EVERYTHING but a
//production logger might only log error, critical, alert, emergency
$logger = new YourLoggerClassWhichImplementsLoggerInterface();

try {
    $dbConfig = //read in a configuration from somewhere
    $rdb = rDB::createInstance(array(
        'dsn' =&gt; $dbConfig-&gt;dsn,
        'user' =&gt; $dbConfig-&gt;user,
        'pass' =&gt; $dbConfig-&gt;pass,
        'logger' =&gt; $logger,
    ));

    //Now pass $rdb to whatever needs it (i.e. a controller).
} catch (Exception $e) {
    $logger-&gt;error($e-&gt;getMessage(), array('exception' =&gt; $e));
    //Display some kind of error page to the user
}