Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 19 additions & 27 deletions src/Database/Log/DebugLog.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
namespace DebugKit\Database\Log;

use Cake\Database\Log\LoggedQuery;
use Cake\Database\Log\QueryLogger;
use Psr\Log\AbstractLogger as PsrAbstractLogger;
use Psr\Log\AbstractLogger;
use Psr\Log\LoggerInterface;

/**
* DebugKit Query logger.
Expand All @@ -25,7 +25,7 @@
* and stores log messages internally so they can be displayed
* or stored for future use.
*/
class DebugLog extends QueryLogger
class DebugLog extends AbstractLogger
{
/**
* Logs from the current request.
Expand All @@ -37,7 +37,7 @@ class DebugLog extends QueryLogger
/**
* Decorated logger.
*
* @var \Cake\Database\Log\LoggedQuery
* @var \Psr\Log\LoggerInterface|null
*/
protected $_logger;

Expand Down Expand Up @@ -73,11 +73,11 @@ class DebugLog extends QueryLogger
/**
* Constructor
*
* @param \Cake\Database\Log\QueryLogger $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, $name, $includeSchema = false)
public function __construct(?LoggerInterface $logger, string $name, bool $includeSchema = false)
{
$this->_logger = $logger;
$this->_connectionName = $name;
Expand All @@ -90,7 +90,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;

Expand All @@ -100,9 +100,9 @@ public function setIncludeSchema($value)
/**
* Get the connection name.
*
* @return array
* @return string
*/
public function name()
public function name(): string
{
return $this->_connectionName;
}
Expand All @@ -112,7 +112,7 @@ public function name()
*
* @return array
*/
public function queries()
public function queries(): array
{
return $this->_queries;
}
Expand All @@ -122,7 +122,7 @@ public function queries()
*
* @return int
*/
public function totalTime()
public function totalTime(): int
{
return $this->_totalTime;
}
Expand All @@ -132,39 +132,31 @@ public function totalTime()
*
* @return int
*/
public function totalRows()
public function totalRows(): int
{
return $this->_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);
} 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,
];
Expand All @@ -176,7 +168,7 @@ public function log(LoggedQuery $query): 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;

Expand Down
12 changes: 5 additions & 7 deletions src/Panel/SqlLogPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
14 changes: 8 additions & 6 deletions tests/TestCase/Database/Log/DebugLogTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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());
Expand All @@ -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());
}

Expand All @@ -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());
}

Expand Down Expand Up @@ -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]);
}
}