From 8776ec58ffc490125c5aa31e18333c83cea3b3d9 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Fri, 24 May 2019 13:10:54 +0200 Subject: [PATCH 1/5] Fix log signature --- src/Database/Log/DebugLog.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Database/Log/DebugLog.php b/src/Database/Log/DebugLog.php index 2d6bfd789..862d2fb13 100644 --- a/src/Database/Log/DebugLog.php +++ b/src/Database/Log/DebugLog.php @@ -138,13 +138,12 @@ public function totalRows() } /** - * Log queries - * - * @param \Cake\Database\Log\LoggedQuery $query The query being logged. - * @return void + * @inheritDoc */ - public function log(LoggedQuery $query): void + public function log($level, $message, array $context = []): void { + $query = $context['query']; + if ($this->_logger) { if ($this->_logger instanceof PsrAbstractLogger) { $this->_logger->log($query, $query->error); From b3627cf3ccd8624265788735ec2aced9c6f89b8f Mon Sep 17 00:00:00 2001 From: ADmad Date: Mon, 27 May 2019 20:35:02 +0530 Subject: [PATCH 2/5] Update DebugLog as per core changes. --- src/Database/Log/DebugLog.php | 36 ++++++++------------ tests/TestCase/Database/Log/DebugLogTest.php | 14 ++++---- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/Database/Log/DebugLog.php b/src/Database/Log/DebugLog.php index 862d2fb13..63759e874 100644 --- a/src/Database/Log/DebugLog.php +++ b/src/Database/Log/DebugLog.php @@ -15,8 +15,7 @@ namespace DebugKit\Database\Log; use Cake\Database\Log\LoggedQuery; -use Cake\Database\Log\QueryLogger; -use Psr\Log\AbstractLogger as PsrAbstractLogger; +use Cake\Log\Engine\BaseLog; /** * DebugKit Query logger. @@ -25,7 +24,7 @@ * and stores log messages internally so they can be displayed * or stored for future use. */ -class DebugLog extends QueryLogger +class DebugLog extends BaseLog { /** * Logs from the current request. @@ -37,7 +36,7 @@ class DebugLog extends QueryLogger /** * Decorated logger. * - * @var \Cake\Database\Log\LoggedQuery + * @var \Psr\Log\LoggerInterface */ protected $_logger; @@ -73,11 +72,11 @@ class DebugLog extends QueryLogger /** * Constructor * - * @param \Cake\Database\Log\QueryLogger $logger The logger to decorate and spy on. + * @param \Psr\Log\LoggerInterface $logger The logger to decorate and spy on. * @param string $name The name of the connection being logged. * @param bool $includeSchema Whether or not schema reflection should be included. */ - public function __construct($logger, $name, $includeSchema = false) + public function __construct($logger, string $name, bool $includeSchema = false) { $this->_logger = $logger; $this->_connectionName = $name; @@ -90,7 +89,7 @@ public function __construct($logger, $name, $includeSchema = false) * @param bool $value Set * @return $this */ - public function setIncludeSchema($value) + public function setIncludeSchema(bool $value) { $this->_includeSchema = $value; @@ -100,9 +99,9 @@ public function setIncludeSchema($value) /** * Get the connection name. * - * @return array + * @return string */ - public function name() + public function name(): string { return $this->_connectionName; } @@ -112,7 +111,7 @@ public function name() * * @return array */ - public function queries() + public function queries(): array { return $this->_queries; } @@ -122,7 +121,7 @@ public function queries() * * @return int */ - public function totalTime() + public function totalTime(): int { return $this->_totalTime; } @@ -132,7 +131,7 @@ public function totalTime() * * @return int */ - public function totalRows() + public function totalRows(): int { return $this->_totalRows; } @@ -145,25 +144,18 @@ public function log($level, $message, array $context = []): void $query = $context['query']; if ($this->_logger) { - if ($this->_logger instanceof PsrAbstractLogger) { - $this->_logger->log($query, $query->error); - } else { - $this->_logger->log($query); - } + $this->_logger->log($level, $message, $context); } if ($this->_includeSchema === false && $this->isSchemaQuery($query)) { return; } - if (!empty($query->params)) { - $query->query = $this->_interpolate($query); - } $this->_totalTime += $query->took; $this->_totalRows += $query->numRows; $this->_queries[] = [ - 'query' => $query->query, + 'query' => (string)$query, 'took' => $query->took, 'rows' => $query->numRows, ]; @@ -175,7 +167,7 @@ public function log($level, $message, array $context = []): void * @param \Cake\Database\Log\LoggedQuery $query The query to check. * @return bool */ - protected function isSchemaQuery(LoggedQuery $query) + protected function isSchemaQuery(LoggedQuery $query): bool { $querystring = $query->query; diff --git a/tests/TestCase/Database/Log/DebugLogTest.php b/tests/TestCase/Database/Log/DebugLogTest.php index 1230f3a84..9a05c3873 100644 --- a/tests/TestCase/Database/Log/DebugLogTest.php +++ b/tests/TestCase/Database/Log/DebugLogTest.php @@ -16,6 +16,8 @@ use Cake\Database\Log\LoggedQuery; use Cake\TestSuite\TestCase; use DebugKit\Database\Log\DebugLog; +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; /** * DebugLog test case @@ -52,12 +54,12 @@ public function testLog() $this->assertCount(0, $this->logger->queries()); - $this->logger->log($query); + $this->logger->log(LogLevel::DEBUG, (string)$query, ['query' => $query]); $this->assertCount(1, $this->logger->queries()); $this->assertEquals(10, $this->logger->totalTime()); $this->assertEquals(5, $this->logger->totalRows()); - $this->logger->log($query); + $this->logger->log(LogLevel::DEBUG, (string)$query, ['query' => $query]); $this->assertCount(2, $this->logger->queries()); $this->assertEquals(20, $this->logger->totalTime()); $this->assertEquals(10, $this->logger->totalRows()); @@ -78,7 +80,7 @@ public function testLogIgnoreReflection($sql) $this->assertCount(0, $this->logger->queries()); - $this->logger->log($query); + $this->logger->log(LogLevel::DEBUG, (string)$query, ['query' => $query]); $this->assertCount(0, $this->logger->queries()); } @@ -98,7 +100,7 @@ public function testLogIgnoreReflectionDisabled($sql) $logger = new DebugLog(null, 'test', true); $this->assertCount(0, $logger->queries()); - $logger->log($query); + $logger->log(LogLevel::DEBUG, (string)$query, ['query' => $query]); $this->assertCount(1, $logger->queries()); } @@ -126,12 +128,12 @@ public function schemaQueryProvider() */ public function testLogDecorates() { - $orig = $this->getMockBuilder('Cake\Database\Log\QueryLogger')->getMock(); + $orig = $this->getMockBuilder(LoggerInterface::class)->getMock(); $orig->expects($this->once()) ->method('log'); $query = new LoggedQuery(); $logger = new DebugLog($orig, 'test'); - $logger->log($query); + $logger->log(LogLevel::DEBUG, (string)$query, ['query' => $query]); } } From e14e6cfc6e2932f6d7cb3731b533a75f2bbb6671 Mon Sep 17 00:00:00 2001 From: ADmad Date: Mon, 27 May 2019 20:43:59 +0530 Subject: [PATCH 3/5] Update typehint --- src/Database/Log/DebugLog.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Database/Log/DebugLog.php b/src/Database/Log/DebugLog.php index 63759e874..9e0dd9202 100644 --- a/src/Database/Log/DebugLog.php +++ b/src/Database/Log/DebugLog.php @@ -16,6 +16,7 @@ use Cake\Database\Log\LoggedQuery; use Cake\Log\Engine\BaseLog; +use Psr\Log\LoggerInterface; /** * DebugKit Query logger. @@ -36,7 +37,7 @@ class DebugLog extends BaseLog /** * Decorated logger. * - * @var \Psr\Log\LoggerInterface + * @var \Psr\Log\LoggerInterface|null */ protected $_logger; @@ -72,11 +73,11 @@ class DebugLog extends BaseLog /** * Constructor * - * @param \Psr\Log\LoggerInterface $logger The logger to decorate and spy on. + * @param \Psr\Log\LoggerInterface|null $logger The logger to decorate and spy on. * @param string $name The name of the connection being logged. * @param bool $includeSchema Whether or not schema reflection should be included. */ - public function __construct($logger, string $name, bool $includeSchema = false) + public function __construct(?LoggerInterface $logger, string $name, bool $includeSchema = false) { $this->_logger = $logger; $this->_connectionName = $name; From 99f8cc076c90437abd617eb06ba2d7f95c826cd8 Mon Sep 17 00:00:00 2001 From: ADmad Date: Mon, 27 May 2019 20:45:50 +0530 Subject: [PATCH 4/5] Extend AbstractLogger instead of BaseLog --- src/Database/Log/DebugLog.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Database/Log/DebugLog.php b/src/Database/Log/DebugLog.php index 9e0dd9202..11a3942cd 100644 --- a/src/Database/Log/DebugLog.php +++ b/src/Database/Log/DebugLog.php @@ -15,7 +15,7 @@ namespace DebugKit\Database\Log; use Cake\Database\Log\LoggedQuery; -use Cake\Log\Engine\BaseLog; +use Psr\Log\AbstractLogger; use Psr\Log\LoggerInterface; /** @@ -25,7 +25,7 @@ * and stores log messages internally so they can be displayed * or stored for future use. */ -class DebugLog extends BaseLog +class DebugLog extends AbstractLogger { /** * Logs from the current request. From 7fe34e62505bff298320053501f0ea8f64f6aae3 Mon Sep 17 00:00:00 2001 From: ADmad Date: Mon, 27 May 2019 20:51:32 +0530 Subject: [PATCH 5/5] Ensure connection is instance of ConnectionInterface --- src/Panel/SqlLogPanel.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Panel/SqlLogPanel.php b/src/Panel/SqlLogPanel.php index 4f48b8532..f0b823b38 100644 --- a/src/Panel/SqlLogPanel.php +++ b/src/Panel/SqlLogPanel.php @@ -14,6 +14,7 @@ namespace DebugKit\Panel; use Cake\Core\Configure; +use Cake\Datasource\ConnectionInterface; use Cake\Datasource\ConnectionManager; use Cake\ORM\Table; use Cake\ORM\TableRegistry; @@ -48,7 +49,9 @@ public function initialize() foreach ($configs as $name) { $connection = ConnectionManager::get($name); - if ($connection->configName() === 'debug_kit') { + if ($connection->configName() === 'debug_kit' + || !$connection instanceof ConnectionInterface + ) { continue; } $logger = null; @@ -64,12 +67,7 @@ public function initialize() $logger = new DebugLog($logger, $name, $includeSchemaReflection); $connection->enableQueryLogging(true); - - if (method_exists($connection, 'setLogger')) { - $connection->setLogger($logger); - } else { - $connection->logger($logger); - } + $connection->setLogger($logger); $this->_loggers[] = $logger; }