浏览代码

Merge remote branch 'lenar/monolog-group-handler'

* lenar/monolog-group-handler:
  [MonologBundle] Add AbstractProcessingHandler to list of compiled classes
  [MonologBundle] Fix schema XML (_ -> -)
  [MonologBundle] Fix config definitions, remove now-redundant tests
  [MonologBundle] Add missing GroupHandler schema definitions
  [MonologBundle] Add missing MailHandler schema definitions
  [MonologBundle] Add support for GroupHandler
Fabien Potencier 14 年之前
父节点
当前提交
3a16f3141a

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

@@ -43,6 +43,7 @@ class Configuration implements ConfigurationInterface
                     ->canBeUnset()
                     ->useAttributeAsKey('name')
                     ->prototype('array')
+                        ->fixXmlConfig('member')
                         ->canBeUnset()
                         ->children()
                             ->scalarNode('type')
@@ -65,6 +66,11 @@ 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') // group
+                                ->canBeUnset()
+                                ->performNoDeepMerging()
+                                ->prototype('scalar')->end()
+                            ->end()
                             ->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 +80,7 @@ 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 'swift_mailer' === $v['type'] && empty($v['email_prototype']) && (empty($v['from_email']) || empty($v['to_email']) || empty($v['subject'])); })

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

@@ -76,6 +76,7 @@ class MonologExtension extends Extension
                 'Monolog\\Formatter\\LineFormatter',
                 'Monolog\\Handler\\HandlerInterface',
                 'Monolog\\Handler\\AbstractHandler',
+                'Monolog\\Handler\\AbstractProcessingHandler',
                 'Monolog\\Handler\\StreamHandler',
                 'Monolog\\Handler\\FingersCrossedHandler',
                 'Monolog\\Logger',
@@ -162,6 +163,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>

+ 7 - 0
src/Symfony/Bundle/MonologBundle/Resources/config/schema/monolog-1.0.xsd

@@ -18,6 +18,9 @@
         <xsd:choice minOccurs="0" maxOccurs="unbounded">
             <xsd:element name="processor" type="xsd:string" />
         </xsd:choice>
+        <xsd:choice minOccurs="0" maxOccurs="unbounded">
+            <xsd:element name="member" type="xsd:string" />
+        </xsd:choice>
         <xsd:attribute name="type" type="xsd:string" use="required" />
         <xsd:attribute name="priority" type="xsd:integer" />
         <xsd:attribute name="level" type="level" />
@@ -31,6 +34,10 @@
         <xsd:attribute name="buffer-size" type="xsd:integer" />
         <xsd:attribute name="max-files" type="xsd:integer" />
         <xsd:attribute name="handler" type="xsd:string" />
+        <xsd:attribute name="from-email" type="xsd:string" />
+        <xsd:attribute name="to-email" type="xsd:string" />
+        <xsd:attribute name="subject" type="xsd:string" />
+        <xsd:attribute name="email-prototype" type="xsd:string" />
         <xsd:attribute name="formatter" type="xsd:string" />
     </xsd:complexType>