@@ -31,6 +31,11 @@ class MonologExtension extends Extension
3131
3232 private $ swiftMailerHandlers = array ();
3333
34+ private function levelToMonologConst ($ level )
35+ {
36+ return is_int ($ level ) ? $ level : constant ('Monolog\Logger:: ' .strtoupper ($ level ));
37+ }
38+
3439 /**
3540 * Loads the Monolog configuration.
3641 *
@@ -85,6 +90,7 @@ public function load(array $configs, ContainerBuilder $container)
8590 'Monolog \\Handler \\AbstractProcessingHandler ' ,
8691 'Monolog \\Handler \\StreamHandler ' ,
8792 'Monolog \\Handler \\FingersCrossedHandler ' ,
93+ 'Monolog \\Handler \\FilterHandler ' ,
8894 'Monolog \\Handler \\TestHandler ' ,
8995 'Monolog \\Logger ' ,
9096 'Symfony \\Bridge \\Monolog \\Logger ' ,
@@ -116,7 +122,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
116122 {
117123 $ handlerId = $ this ->getHandlerId ($ name );
118124 $ definition = new Definition (sprintf ('%%monolog.handler.%s.class%% ' , $ handler ['type ' ]));
119- $ handler ['level ' ] = is_int ( $ handler [ ' level ' ]) ? $ handler [ ' level ' ] : constant ( ' Monolog\Logger:: ' . strtoupper ( $ handler ['level ' ]) );
125+ $ handler ['level ' ] = $ this -> levelToMonologConst ( $ handler ['level ' ]);
120126
121127 switch ($ handler ['type ' ]) {
122128 case 'service ' :
@@ -240,7 +246,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
240246 break ;
241247
242248 case 'fingers_crossed ' :
243- $ handler ['action_level ' ] = is_int ( $ handler [ ' action_level ' ]) ? $ handler [ ' action_level ' ] : constant ( ' Monolog\Logger:: ' . strtoupper ( $ handler ['action_level ' ]) );
249+ $ handler ['action_level ' ] = $ this -> levelToMonologConst ( $ handler ['action_level ' ]);
244250 $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
245251 $ this ->nestedHandlers [] = $ nestedHandlerId ;
246252
@@ -264,6 +270,25 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
264270 ));
265271 break ;
266272
273+ case 'filter ' :
274+ $ handler ['min_level ' ] = $ this ->levelToMonologConst ($ handler ['min_level ' ]);
275+ $ handler ['max_level ' ] = $ this ->levelToMonologConst ($ handler ['max_level ' ]);
276+ foreach (array_keys ($ handler ['accepted_levels ' ]) as $ k ) {
277+ $ handler ['accepted_levels ' ][$ k ] = $ this ->levelToMonologConst ($ handler ['accepted_levels ' ][$ k ]);
278+ }
279+
280+ $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
281+ $ this ->nestedHandlers [] = $ nestedHandlerId ;
282+ $ minLevelOrList = !empty ($ handler ['accepted_levels ' ]) ? $ handler ['accepted_levels ' ] : $ handler ['min_level ' ];
283+
284+ $ definition ->setArguments (array (
285+ new Reference ($ nestedHandlerId ),
286+ $ minLevelOrList ,
287+ $ handler ['max_level ' ],
288+ $ handler ['bubble ' ]
289+ ));
290+ break ;
291+
267292 case 'buffer ' :
268293 $ nestedHandlerId = $ this ->getHandlerId ($ handler ['handler ' ]);
269294 $ this ->nestedHandlers [] = $ nestedHandlerId ;
0 commit comments