Над прослойкой драйвера к вашей бд вы можете написать обертку и вместо вызова, к примеру, PDO::query вызывать PDOExtend::query с наполнением вида:
class PDOExtend extends PDO
{
/** @var \Psr\Log\LoggerInterface */
protected $logger;
public function __construct(string $dsn, string $username, string $passwd, array $options, \Psr\Log\LoggerInterface $logger)
{
parent::__construct($dsn, $username, $passwd, $options);
$this->logger = $logger;
}
public function query(string $preparedQuery): PDOStatement
{
$queryStart = microtime(true);
$result = parent::query($preparedQuery);
$queryStop = microtime(true);
$this->logger->debug(sprintf('%s query executed %s', static::class, $preparedQuery), [
'query_start_time' => $queryStart,
'query_finish_time' => $queryStop,
'elapsed' => $queryStop - $queryStart
]);
return $result;
}
}