Skip to content

Commit 1be60b1

Browse files
committed
Merge remote-tracking branch 'cevou/raven'
2 parents b492800 + c8d7804 commit 1be60b1

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public function getConfigTreeBuilder()
120120
->scalarNode('timeout')->end() // socket_handler
121121
->scalarNode('connection_timeout')->end() // socket_handler
122122
->booleanNode('persistent')->end() // socket_handler
123+
->scalarNode('dsn')->end() // raven_handler
123124
->arrayNode('channels')
124125
->fixXmlConfig('channel', 'elements')
125126
->canBeUnset()
@@ -204,6 +205,10 @@ public function getConfigTreeBuilder()
204205
->ifTrue(function($v) { return 'pushover' === $v['type'] && (empty($v['token']) || empty($v['user'])); })
205206
->thenInvalid('The token and user have to be specified to use a PushoverHandler')
206207
->end()
208+
->validate()
209+
->ifTrue(function($v) { return 'raven' === $v['type'] && !isset($v['dsn']); })
210+
->thenInvalid('The DSN has to be specified to use a RavenHandler')
211+
->end()
207212
->end()
208213
->validate()
209214
->ifTrue(function($v) { return isset($v['debug']); })

DependencyInjection/MonologExtension.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Config\FileLocator;
1818
use Symfony\Component\DependencyInjection\Definition;
1919
use Symfony\Component\DependencyInjection\Reference;
20+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
2021

2122
/**
2223
* MonologExtension is an extension for the Monolog library.
@@ -294,6 +295,22 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
294295
));
295296
break;
296297

298+
case 'raven':
299+
$clientId = 'monolog.raven.client.' . sha1($handler['dsn']);
300+
if (!$container->hasDefinition($clientId)) {
301+
$client = new Definition("Raven_Client", array(
302+
$handler['dsn']
303+
));
304+
$client->setPublic(false);
305+
$container->setDefinition($clientId, $client);
306+
}
307+
$definition->setArguments(array(
308+
new Reference($clientId),
309+
$handler['level'],
310+
$handler['bubble'],
311+
));
312+
break;
313+
297314
// Handlers using the constructor of AbstractHandler without adding their own arguments
298315
case 'test':
299316
case 'null':

Resources/config/monolog.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<parameter key="monolog.handler.native_mailer.class">Monolog\Handler\NativeMailerHandler</parameter>
2323
<parameter key="monolog.handler.socket.class">Monolog\Handler\SocketHandler</parameter>
2424
<parameter key="monolog.handler.pushover.class">Monolog\Handler\PushoverHandler</parameter>
25+
<parameter key="monolog.handler.raven.class">Monolog\Handler\RavenHandler</parameter>
2526

2627
<parameter key="monolog.handler.fingers_crossed.class">Monolog\Handler\FingersCrossedHandler</parameter>
2728
<parameter key="monolog.handler.fingers_crossed.error_level_activation_strategy.class">Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy</parameter>

Tests/DependencyInjection/MonologExtensionTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,30 @@ public function testSocketHandler()
169169

170170
}
171171

172+
public function testRavenHandler()
173+
{
174+
$dsn = 'http://43f6017361224d098402974103bfc53d:[email protected]:9000/1';
175+
176+
try {
177+
$this->getContainer(array(array('handlers' => array('raven' => array('type' => 'raven')))));
178+
$this->fail();
179+
} catch (InvalidConfigurationException $e) {
180+
$this->assertContains('DSN', $e->getMessage());
181+
}
182+
183+
$container = $this->getContainer(array(array('handlers' => array('raven' => array(
184+
'type' => 'raven', 'dsn' => $dsn )
185+
))));
186+
$this->assertTrue($container->hasDefinition('monolog.logger'));
187+
$this->assertTrue($container->hasDefinition('monolog.handler.raven'));
188+
189+
$logger = $container->getDefinition('monolog.logger');
190+
$this->assertDICDefinitionMethodCallAt(0, $logger, 'pushHandler', array(new Reference('monolog.handler.raven')));
191+
192+
$handler = $container->getDefinition('monolog.handler.raven');
193+
$this->assertDICDefinitionClass($handler, '%monolog.handler.raven.class%');
194+
}
195+
172196
protected function getContainer(array $config = array())
173197
{
174198
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)