diff --git a/examples/using-logger.php b/examples/using-logger.php index 1849331c..d72e943c 100644 --- a/examples/using-logger.php +++ b/examples/using-logger.php @@ -20,6 +20,7 @@ $dibi = new Dibi\Connection([ // enable query logging to this file 'profiler' => [ 'file' => 'log/log.sql', + 'errorsOnly' => false, ], ]); diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 5b5d8c4c..9938fa5b 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -51,6 +51,7 @@ class Connection implements IConnection * - profiler (array) * - run (bool) => enable profiler? * - file => file to log + * - errorsOnly (bool) => log only errors * - substitutes (array) => map of driver specific substitutes (under development) * - onConnect (array) => list of SQL queries to execute (by Connection::query()) after connection is established * @throws Exception @@ -70,7 +71,8 @@ class Connection implements IConnection // profiler if (isset($config['profiler']['file']) && (!isset($config['profiler']['run']) || $config['profiler']['run'])) { $filter = $config['profiler']['filter'] ?? Event::QUERY; - $this->onEvent[] = [new Loggers\FileLogger($config['profiler']['file'], $filter), 'logEvent']; + $errorsOnly = $config['profiler']['errorsOnly'] ?? false; + $this->onEvent[] = [new Loggers\FileLogger($config['profiler']['file'], $filter, $errorsOnly), 'logEvent']; } $this->substitutes = new HashMap(function (string $expr) { return ":$expr:"; }); diff --git a/src/Dibi/Loggers/FileLogger.php b/src/Dibi/Loggers/FileLogger.php index b584c4ee..6fa6c118 100644 --- a/src/Dibi/Loggers/FileLogger.php +++ b/src/Dibi/Loggers/FileLogger.php @@ -25,11 +25,15 @@ class FileLogger /** @var int */ public $filter; + /** @var bool */ + private $errorsOnly; - public function __construct(string $file, int $filter = null) + + public function __construct(string $file, int $filter = null, bool $errorsOnly = false) { $this->file = $file; $this->filter = $filter ?: Dibi\Event::QUERY; + $this->errorsOnly = $errorsOnly; } @@ -38,7 +42,10 @@ class FileLogger */ public function logEvent(Dibi\Event $event): void { - if (($event->type & $this->filter) === 0) { + if ( + (($event->type & $this->filter) === 0) + || ($this->errorsOnly === true && !$event->result instanceof \Exception) + ) { return; }