Ver código fonte

[MonologBundle] Add support for GroupHandler

lenar 14 anos atrás
pai
commit
40795fcc5d

+ 6 - 1
src/Symfony/Bundle/MonologBundle/DependencyInjection/Configuration.php

@@ -65,6 +65,7 @@ class Configuration implements ConfigurationInterface
                             ->booleanNode('stop_buffering')->defaultTrue()->end()// fingers_crossed
                             ->scalarNode('buffer_size')->defaultValue(0)->end() // fingers_crossed and buffer
                             ->scalarNode('handler')->end() // fingers_crossed and buffer
+                            ->arrayNode('members')->prototype('scalar')->end()->end() // group
                             ->scalarNode('from_email')->end() // swift_mailer and native_mailer
                             ->scalarNode('to_email')->end() // swift_mailer and native_mailer
                             ->scalarNode('subject')->end() // swift_mailer and native_mailer
@@ -74,7 +75,11 @@ class Configuration implements ConfigurationInterface
                         ->append($this->getProcessorsNode())
                         ->validate()
                             ->ifTrue(function($v) { return ('fingers_crossed' === $v['type'] || 'buffer' === $v['type']) && 1 !== count($v['handler']); })
-                            ->thenInvalid('The handler has to be specified to use a FingersCrossedHandler')
+                            ->thenInvalid('The handler has to be specified to use a FingersCrossedHandler or BufferHandler')
+                        ->end()
+                        ->validate()
+                            ->ifTrue(function($v) { return 'group' === $v['type'] && count($v['members']) < 2; })
+                            ->thenInvalid('At least two members have to be specified to use a GroupHandler')
                         ->end()
                         ->validate()
                             ->ifTrue(function($v) { return 'swift_mailer' === $v['type'] && empty($v['email_prototype']) && (empty($v['from_email']) || empty($v['to_email']) || empty($v['subject'])); })

+ 14 - 0
src/Symfony/Bundle/MonologBundle/DependencyInjection/MonologExtension.php

@@ -162,6 +162,20 @@ class MonologExtension extends Extension
             ));
             break;
 
+        case 'group':
+            $references = array();
+            foreach ($handler['members'] as $nestedHandler) {
+                $nestedHandlerId = $this->getHandlerId($nestedHandler);
+                array_push($this->nestedHandlers, $nestedHandlerId);
+                $references[] = new Reference($nestedHandlerId);
+            }
+
+            $definition->setArguments(array(
+                $references,
+                $handler['bubble'],
+            ));
+            break;
+
         case 'syslog':
             $definition->setArguments(array(
                 $handler['ident'],

+ 1 - 0
src/Symfony/Bundle/MonologBundle/Resources/config/monolog.xml

@@ -8,6 +8,7 @@
         <parameter key="monolog.logger.class">Symfony\Bridge\Monolog\Logger</parameter>
         <parameter key="monolog.handler.stream.class">Monolog\Handler\StreamHandler</parameter>
         <parameter key="monolog.handler.fingers_crossed.class">Monolog\Handler\FingersCrossedHandler</parameter>
+        <parameter key="monolog.handler.group.class">Monolog\Handler\GroupHandler</parameter>
         <parameter key="monolog.handler.buffer.class">Monolog\Handler\BufferHandler</parameter>
         <parameter key="monolog.handler.rotating_file.class">Monolog\Handler\RotatingFileHandler</parameter>
         <parameter key="monolog.handler.syslog.class">Monolog\Handler\SyslogHandler</parameter>

+ 22 - 0
src/Symfony/Bundle/MonologBundle/Tests/DependencyInjection/MonologExtensionTest.php

@@ -221,6 +221,28 @@ class MonologExtensionTest extends TestCase
         $loader->load(array(array('handlers' => array('main' => array('type' => 'buffer')))), $container);
     }
 
+    /**
+     * @expectedException Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
+     */
+    public function testExceptionWhenUsingGroupWithoutMembers()
+    {
+        $container = new ContainerBuilder();
+        $loader = new MonologExtension();
+
+        $loader->load(array(array('handlers' => array('main' => array('type' => 'group')))), $container);
+    }
+
+    /**
+     * @expectedException Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
+     */
+    public function testExceptionWhenUsingGroupWithOnlyOneMember()
+    {
+        $container = new ContainerBuilder();
+        $loader = new MonologExtension();
+
+        $loader->load(array(array('handlers' => array('main' => array('type' => 'group', 'members' => array('test'))))), $container);
+    }
+
     /**
      * @expectedException Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
      */