merged monolog
This commit is contained in:
commit
5d55b231bb
@ -57,13 +57,18 @@ class Configuration implements ConfigurationInterface
|
||||
->scalarNode('priority')->defaultValue(0)->end()
|
||||
->scalarNode('level')->defaultValue('DEBUG')->end()
|
||||
->booleanNode('bubble')->defaultFalse()->end()
|
||||
->scalarNode('path')->end() // stream and rotating
|
||||
->scalarNode('ident')->end() // syslog
|
||||
->scalarNode('facility')->end() // syslog
|
||||
->scalarNode('max_files')->end() // rotating
|
||||
->scalarNode('action_level')->end() // fingers_crossed
|
||||
->scalarNode('buffer_size')->end() // fingers_crossed and buffer
|
||||
->scalarNode('path')->defaultValue('%kernel.logs_dir%/%kernel.environment%.log')->end() // stream and rotating
|
||||
->scalarNode('ident')->defaultFalse()->end() // syslog
|
||||
->scalarNode('facility')->defaultValue('user')->end() // syslog
|
||||
->scalarNode('max_files')->defaultValue(0)->end() // rotating
|
||||
->scalarNode('action_level')->defaultValue('WARNING')->end() // fingers_crossed
|
||||
->booleanNode('stop_buffering')->defaultTrue()->end()// fingers_crossed
|
||||
->scalarNode('buffer_size')->defaultValue(0)->end() // fingers_crossed and buffer
|
||||
->scalarNode('handler')->end() // fingers_crossed and buffer
|
||||
->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
|
||||
->scalarNode('email_prototype')->end() // swift_mailer
|
||||
->scalarNode('formatter')->end()
|
||||
->end()
|
||||
->append($this->getProcessorsNode())
|
||||
@ -71,6 +76,14 @@ class Configuration implements ConfigurationInterface
|
||||
->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')
|
||||
->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'])); })
|
||||
->thenInvalid('The sender, recipient and subject or an email prototype have to be specified to use a SwiftMailerHandler')
|
||||
->end()
|
||||
->validate()
|
||||
->ifTrue(function($v) { return 'native_mailer' === $v['type'] && (empty($v['from_email']) || empty($v['to_email']) || empty($v['subject'])); })
|
||||
->thenInvalid('The sender, recipient and subject have to be specified to use a NativeMailerHandler')
|
||||
->end()
|
||||
->validate()
|
||||
->ifTrue(function($v) { return 'service' === $v['type'] && !isset($v['id']); })
|
||||
->thenInvalid('The id has to be specified to use a service as handler')
|
||||
|
@ -112,10 +112,6 @@ class MonologExtension extends Extension
|
||||
return $handlerId;
|
||||
|
||||
case 'stream':
|
||||
if (!isset($handler['path'])) {
|
||||
$handler['path'] = '%kernel.logs_dir%/%kernel.environment%.log';
|
||||
}
|
||||
|
||||
$definition->setArguments(array(
|
||||
$handler['path'],
|
||||
$handler['level'],
|
||||
@ -132,22 +128,15 @@ class MonologExtension extends Extension
|
||||
break;
|
||||
|
||||
case 'rotating_file':
|
||||
if (!isset($handler['path'])) {
|
||||
$handler['path'] = '%kernel.logs_dir%/%kernel.environment%.log';
|
||||
}
|
||||
|
||||
$definition->setArguments(array(
|
||||
$handler['path'],
|
||||
isset($handler['max_files']) ? $handler['max_files'] : 0,
|
||||
$handler['max_files'],
|
||||
$handler['level'],
|
||||
$handler['bubble'],
|
||||
));
|
||||
break;
|
||||
|
||||
case 'fingers_crossed':
|
||||
if (!isset($handler['action_level'])) {
|
||||
$handler['action_level'] = 'WARNING';
|
||||
}
|
||||
$handler['action_level'] = is_int($handler['action_level']) ? $handler['action_level'] : constant('Monolog\Logger::'.strtoupper($handler['action_level']));
|
||||
$nestedHandlerId = $this->getHandlerId($handler['handler']);
|
||||
array_push($this->nestedHandlers, $nestedHandlerId);
|
||||
@ -155,8 +144,9 @@ class MonologExtension extends Extension
|
||||
$definition->setArguments(array(
|
||||
new Reference($nestedHandlerId),
|
||||
$handler['action_level'],
|
||||
isset($handler['buffer_size']) ? $handler['buffer_size'] : 0,
|
||||
$handler['buffer_size'],
|
||||
$handler['bubble'],
|
||||
$handler['stop_buffering'],
|
||||
));
|
||||
break;
|
||||
|
||||
@ -166,20 +156,13 @@ class MonologExtension extends Extension
|
||||
|
||||
$definition->setArguments(array(
|
||||
new Reference($nestedHandlerId),
|
||||
isset($handler['buffer_size']) ? $handler['buffer_size'] : 0,
|
||||
$handler['buffer_size'],
|
||||
$handler['level'],
|
||||
$handler['bubble'],
|
||||
));
|
||||
break;
|
||||
|
||||
case 'syslog':
|
||||
if (!isset($handler['ident'])) {
|
||||
$handler['ident'] = false;
|
||||
}
|
||||
if (!isset($handler['facility'])) {
|
||||
$handler['facility'] = 'user';
|
||||
}
|
||||
|
||||
$definition->setArguments(array(
|
||||
$handler['ident'],
|
||||
$handler['facility'],
|
||||
@ -188,13 +171,49 @@ class MonologExtension extends Extension
|
||||
));
|
||||
break;
|
||||
|
||||
default:
|
||||
// Handler using the constructor of AbstractHandler without adding their own arguments
|
||||
case 'swift_mailer':
|
||||
if (isset($handler['email_prototype'])) {
|
||||
$prototype = $this->parseDefinition($handler['email_prototype']);
|
||||
} else {
|
||||
$message = new Definition('Swift_Message');
|
||||
$message->setPublic(false);
|
||||
$message->addMethodCall('setFrom', $handler['from_email']);
|
||||
$message->addMethodCall('setTo', $handler['to_email']);
|
||||
$message->addMethodCall('setSubject', $handler['subject']);
|
||||
$messageId = sprintf('%s.mail_prototype', $handlerId);
|
||||
$container->setDefinition($messageId, $message);
|
||||
$prototype = new Reference($messageId);
|
||||
}
|
||||
$definition->setArguments(array(
|
||||
new Reference('mailer'),
|
||||
$prototype,
|
||||
$handler['level'],
|
||||
$handler['bubble'],
|
||||
));
|
||||
break;
|
||||
|
||||
case 'native_mailer':
|
||||
$definition->setArguments(array(
|
||||
$handler['to_email'],
|
||||
$handler['subject'],
|
||||
$handler['from_email'],
|
||||
$handler['level'],
|
||||
$handler['bubble'],
|
||||
));
|
||||
break;
|
||||
|
||||
// Handlers using the constructor of AbstractHandler without adding their own arguments
|
||||
case 'test':
|
||||
case 'null':
|
||||
case 'debug':
|
||||
$definition->setArguments(array(
|
||||
$handler['level'],
|
||||
$handler['bubble'],
|
||||
));
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \InvalidArgumentException(sprintf('Invalid handler type "%s" given for handler "%s"', $handler['type'], $name));
|
||||
}
|
||||
|
||||
if (!empty($handler['formatter'])) {
|
||||
@ -216,10 +235,16 @@ class MonologExtension extends Extension
|
||||
private function addProcessors(Definition $definition, array $processors)
|
||||
{
|
||||
foreach (array_reverse($processors) as $processor) {
|
||||
if (0 === strpos($processor, '@')) {
|
||||
$processor = new Reference(substr($processor, 1));
|
||||
}
|
||||
$definition->addMethodCall('pushProcessor', array($processor));
|
||||
$definition->addMethodCall('pushProcessor', array($this->parseDefinition($processor)));
|
||||
}
|
||||
}
|
||||
|
||||
private function parseDefinition($definition)
|
||||
{
|
||||
if (0 === strpos($processor, '@')) {
|
||||
return new Reference(substr($definition, 1));
|
||||
}
|
||||
|
||||
return $definition;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,8 @@
|
||||
<parameter key="monolog.handler.test.class">Monolog\Handler\TestHandler</parameter>
|
||||
<parameter key="monolog.handler.firephp.class">Symfony\Bridge\Monolog\Handler\FirePHPHandler</parameter>
|
||||
<parameter key="monolog.handler.debug.class">Symfony\Bridge\Monolog\Handler\DebugHandler</parameter>
|
||||
<parameter key="monolog.handler.swift_mailer.class">Monolog\Handler\SwiftMailerHandler</parameter>
|
||||
<parameter key="monolog.handler.native_mailer.class">Monolog\Handler\NativeMailerHandler</parameter>
|
||||
</parameters>
|
||||
|
||||
<services>
|
||||
|
@ -77,7 +77,7 @@ class MonologExtensionTest extends TestCase
|
||||
|
||||
$handler = $container->getDefinition('monolog.handler.main');
|
||||
$this->assertDICDefinitionClass($handler, '%monolog.handler.fingers_crossed.class%');
|
||||
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, false));
|
||||
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, false, true));
|
||||
}
|
||||
|
||||
public function testLoadWithOverwriting()
|
||||
@ -110,7 +110,7 @@ class MonologExtensionTest extends TestCase
|
||||
|
||||
$handler = $container->getDefinition('monolog.handler.main');
|
||||
$this->assertDICDefinitionClass($handler, '%monolog.handler.fingers_crossed.class%');
|
||||
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, false));
|
||||
$this->assertDICConstructorArguments($handler, array(new Reference('monolog.handler.nested'), \Monolog\Logger::ERROR, 0, false, true));
|
||||
}
|
||||
|
||||
public function testLoadWithNewAtEnd()
|
||||
@ -188,6 +188,17 @@ class MonologExtensionTest extends TestCase
|
||||
$this->assertDICConstructorArguments($handler, array('/tmp/last.log', \Monolog\Logger::ERROR, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
public function testExceptionWhenInvalidHandler()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new MonologExtension();
|
||||
|
||||
$loader->load(array(array('handlers' => array('main' => array('type' => 'invalid_handler')))), $container);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
*/
|
||||
|
Reference in New Issue
Block a user