This repository was archived by the owner on Jan 24, 2024. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +41
-1
lines changed Expand file tree Collapse file tree 2 files changed +41
-1
lines changed Original file line number Diff line number Diff line change 13
13
14
14
use Psr \Container \ContainerExceptionInterface ;
15
15
use Psr \Log \LoggerAwareInterface ;
16
+ use Psr \Log \LoggerInterface ;
16
17
use Psr \Log \NullLogger ;
17
18
use Spiral \Core \Container ;
18
19
use Spiral \Core \FactoryInterface ;
@@ -89,7 +90,9 @@ final class DatabaseManager implements
89
90
Container \SingletonInterface,
90
91
Container \InjectorInterface
91
92
{
92
- use LoggerTrait;
93
+ use LoggerTrait {
94
+ setLogger as protected internalSetLogger;
95
+ }
93
96
94
97
/** @var DatabaseConfig */
95
98
private $ config ;
@@ -103,6 +106,20 @@ final class DatabaseManager implements
103
106
/** @var DriverInterface[] */
104
107
private $ drivers = [];
105
108
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
+
106
123
/**
107
124
* @param DatabaseConfig $config
108
125
* @param FactoryInterface $factory
Original file line number Diff line number Diff line change 12
12
13
13
use Mockery as m ;
14
14
use PHPUnit \Framework \TestCase ;
15
+ use Psr \Log \LoggerAwareInterface ;
16
+ use Psr \Log \LoggerInterface ;
15
17
use Spiral \Core \Container ;
16
18
use Spiral \Database \Config \DatabaseConfig ;
17
19
use Spiral \Database \Database ;
@@ -130,6 +132,27 @@ public function testGetDrivers(): void
130
132
$ this ->assertCount (2 , $ dbal ->getDrivers ());
131
133
}
132
134
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
+
133
156
public function testGetDatabases (): void
134
157
{
135
158
$ read = m::mock (DriverInterface::class);
You can’t perform that action at this time.
0 commit comments