Skip to content
This repository was archived by the owner on Jan 24, 2024. It is now read-only.

Commit 7f86f48

Browse files
committed
1 parent f9cdcc9 commit 7f86f48

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/DatabaseManager.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Psr\Container\ContainerExceptionInterface;
1515
use Psr\Log\LoggerAwareInterface;
16+
use Psr\Log\LoggerInterface;
1617
use Psr\Log\NullLogger;
1718
use Spiral\Core\Container;
1819
use Spiral\Core\FactoryInterface;
@@ -89,7 +90,9 @@ final class DatabaseManager implements
8990
Container\SingletonInterface,
9091
Container\InjectorInterface
9192
{
92-
use LoggerTrait;
93+
use LoggerTrait {
94+
setLogger as protected internalSetLogger;
95+
}
9396

9497
/** @var DatabaseConfig */
9598
private $config;
@@ -103,6 +106,20 @@ final class DatabaseManager implements
103106
/** @var DriverInterface[] */
104107
private $drivers = [];
105108

109+
/**
110+
* Set logger for all drivers
111+
*/
112+
public function setLogger(LoggerInterface $logger): void
113+
{
114+
$this->internalSetLogger($logger);
115+
// Assign the logger to all initialized drivers
116+
foreach ($this->drivers as $driver) {
117+
if ($driver instanceof LoggerAwareInterface) {
118+
$driver->setLogger($this->logger);
119+
}
120+
}
121+
}
122+
106123
/**
107124
* @param DatabaseConfig $config
108125
* @param FactoryInterface $factory

tests/Database/ManagerTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
use Mockery as m;
1414
use PHPUnit\Framework\TestCase;
15+
use Psr\Log\LoggerAwareInterface;
16+
use Psr\Log\LoggerInterface;
1517
use Spiral\Core\Container;
1618
use Spiral\Database\Config\DatabaseConfig;
1719
use Spiral\Database\Database;
@@ -130,6 +132,27 @@ public function testGetDrivers(): void
130132
$this->assertCount(2, $dbal->getDrivers());
131133
}
132134

135+
public function testSetLogger(): void
136+
{
137+
$logger = m::mock(LoggerInterface::class);
138+
139+
$driverWithoutLogger = m::mock(DriverInterface::class);
140+
141+
$driverWithLogger = m::mock(DriverInterface::class, LoggerAwareInterface::class)
142+
->shouldReceive('setLogger')->with($logger)->once()->andReturnNull()
143+
->getMock();
144+
self::assertInstanceOf(LoggerAwareInterface::class, $driverWithLogger);
145+
146+
$dbal = new DatabaseManager(new DatabaseConfig(self::DEFAULT_OPTIONS));
147+
148+
$dbal->addDriver('read', $driverWithoutLogger);
149+
$dbal->addDriver('write', $driverWithLogger);
150+
151+
$dbal->setLogger($logger);
152+
153+
m::close();
154+
}
155+
133156
public function testGetDatabases(): void
134157
{
135158
$read = m::mock(DriverInterface::class);

0 commit comments

Comments
 (0)