55use Enqueue \Consumption \Context ;
66use Enqueue \Consumption \EmptyExtensionTrait ;
77use Enqueue \Consumption \ExtensionInterface ;
8+ use Enqueue \Consumption \OnStartContext ;
89use Enqueue \Consumption \Result ;
910use Interop \Queue \PsrMessage ;
1011use Psr \Log \LoggerInterface ;
12+ use Psr \Log \NullLogger ;
1113
1214class LoggerExtension implements ExtensionInterface
1315{
@@ -18,28 +20,38 @@ class LoggerExtension implements ExtensionInterface
1820 */
1921 private $ logger ;
2022
23+ /**
24+ * @var bool
25+ */
26+ private $ replaceExisting ;
27+
2128 /**
2229 * @param LoggerInterface $logger
30+ * @param bool $replaceExisting
2331 */
24- public function __construct (LoggerInterface $ logger )
32+ public function __construct (LoggerInterface $ logger, $ replaceExisting = true )
2533 {
2634 $ this ->logger = $ logger ;
35+ $ this ->replaceExisting = $ replaceExisting ;
2736 }
2837
2938 /**
3039 * {@inheritdoc}
3140 */
32- public function onStart (Context $ context )
41+ public function onStart (OnStartContext $ context )
3342 {
34- if ($ context ->getLogger ()) {
43+ if ($ context ->getLogger () instanceof NullLogger) {
44+ $ context ->setLogger ($ this ->logger );
45+ $ this ->logger ->debug (sprintf ('Set context \'s logger "%s" ' , get_class ($ this ->logger )));
46+ } elseif ($ this ->replaceExisting ) {
47+ $ context ->setLogger ($ this ->logger );
3548 $ context ->getLogger ()->debug (sprintf (
36- 'Skip setting context \'s logger "%s". Another one "%s" has already been set. ' ,
37- get_class ($ this -> logger ),
38- get_class ($ context -> getLogger () )
49+ 'Replace context \'s logger "%s" with "%s" ' ,
50+ get_class ($ context -> getLogger () ),
51+ get_class ($ this -> logger )
3952 ));
4053 } else {
41- $ context ->setLogger ($ this ->logger );
42- $ this ->logger ->debug (sprintf ('Set context \'s logger "%s" ' , get_class ($ this ->logger )));
54+ $ context ->getLogger ()->debug (sprintf ('Skip setting a logger "%s" ' , get_class ($ this ->logger )));
4355 }
4456 }
4557
0 commit comments