Skip to content

Commit a27f86c

Browse files
committed
Added raven support
1 parent b492800 commit a27f86c

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: 13 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,18 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
294295
));
295296
break;
296297

298+
case 'raven':
299+
if (class_exists("Raven_Client")) {
300+
$definition->setArguments(array(
301+
new \Raven_Client($handler['dsn']),
302+
$handler['level'],
303+
$handler['bubble'],
304+
));
305+
} else {
306+
throw new InvalidConfigurationException("raven/raven not installed");
307+
}
308+
break;
309+
297310
// Handlers using the constructor of AbstractHandler without adding their own arguments
298311
case 'test':
299312
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: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,34 @@ public function testSocketHandler()
169169

170170
}
171171

172+
public function testRavenHandler()
173+
{
174+
if (!class_exists("Raven_Client")) {
175+
$this->markTestSkipped("raven/raven not installed");
176+
}
177+
$dsn = 'http://43f6017361224d098402974103bfc53d:[email protected]:9000/1';
178+
179+
try {
180+
$this->getContainer(array(array('handlers' => array('raven' => array('type' => 'raven')))));
181+
$this->fail();
182+
} catch (InvalidConfigurationException $e) {
183+
$this->assertContains('DSN', $e->getMessage());
184+
}
185+
186+
$container = $this->getContainer(array(array('handlers' => array('raven' => array(
187+
'type' => 'raven', 'dsn' => $dsn )
188+
))));
189+
$this->assertTrue($container->hasDefinition('monolog.logger'));
190+
$this->assertTrue($container->hasDefinition('monolog.handler.raven'));
191+
192+
$logger = $container->getDefinition('monolog.logger');
193+
$this->assertDICDefinitionMethodCallAt(0, $logger, 'pushHandler', array(new Reference('monolog.handler.raven')));
194+
195+
$handler = $container->getDefinition('monolog.handler.raven');
196+
$this->assertDICDefinitionClass($handler, '%monolog.handler.raven.class%');
197+
$this->assertDICConstructorArguments($handler, array(new \Raven_Client($dsn), \Monolog\Logger::DEBUG, true));
198+
}
199+
172200
protected function getContainer(array $config = array())
173201
{
174202
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)