@@ -312,7 +312,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
312312 $ handler ['passthru_level ' ] = $ this ->levelToMonologConst ($ handler ['passthru_level ' ]);
313313 }
314314 $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
315- $ this ->nestedHandlers [] = $ nestedHandlerId ;
315+ $ this ->markNestedHandler ( $ nestedHandlerId) ;
316316
317317 if (isset ($ handler ['activation_strategy ' ])) {
318318 $ activation = new Reference ($ handler ['activation_strategy ' ]);
@@ -343,7 +343,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
343343 }
344344
345345 $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
346- $ this ->nestedHandlers [] = $ nestedHandlerId ;
346+ $ this ->markNestedHandler ( $ nestedHandlerId) ;
347347 $ minLevelOrList = !empty ($ handler ['accepted_levels ' ]) ? $ handler ['accepted_levels ' ] : $ handler ['min_level ' ];
348348
349349 $ definition ->setArguments (array (
@@ -356,7 +356,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
356356
357357 case 'buffer ' :
358358 $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
359- $ this ->nestedHandlers [] = $ nestedHandlerId ;
359+ $ this ->markNestedHandler ( $ nestedHandlerId) ;
360360
361361 $ definition ->setArguments (array (
362362 new Reference ($ nestedHandlerId ),
@@ -372,7 +372,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
372372 $ references = array ();
373373 foreach ($ handler ['members ' ] as $ nestedHandler ) {
374374 $ nestedHandlerId = $ this ->getHandlerId ($ nestedHandler );
375- $ this ->nestedHandlers [] = $ nestedHandlerId ;
375+ $ this ->markNestedHandler ( $ nestedHandlerId) ;
376376 $ references [] = new Reference ($ nestedHandlerId );
377377 }
378378
@@ -642,6 +642,10 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
642642 throw new \InvalidArgumentException (sprintf ('Invalid handler type "%s" given for handler "%s" ' , $ handler ['type ' ], $ name ));
643643 }
644644
645+ if (!empty ($ handler ['nested ' ]) && true === $ handler ['nested ' ]) {
646+ $ this ->markNestedHandler ($ handlerId );
647+ }
648+
645649 if (!empty ($ handler ['formatter ' ])) {
646650 $ definition ->addMethodCall ('setFormatter ' , array (new Reference ($ handler ['formatter ' ])));
647651 }
@@ -650,6 +654,15 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
650654 return $ handlerId ;
651655 }
652656
657+ private function markNestedHandler ($ nestedHandlerId )
658+ {
659+ if (in_array ($ nestedHandlerId , $ this ->nestedHandlers )) {
660+ return ;
661+ }
662+
663+ $ this ->nestedHandlers [] = $ nestedHandlerId ;
664+ }
665+
653666 private function getHandlerId ($ name )
654667 {
655668 return sprintf ('monolog.handler.%s ' , $ name );
0 commit comments