Skip to content

Commit 89998b5

Browse files
authored
Merge pull request #321 from inverse/v2-wireup
Supporting v2 handlers and removing removed.
2 parents 6792805 + 79cc3ff commit 89998b5

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

DependencyInjection/MonologExtension.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler
467467

468468
case 'group':
469469
case 'whatfailuregroup':
470+
case 'fallbackgroup':
470471
$references = [];
471472
foreach ($handler['members'] as $nestedHandler) {
472473
$nestedHandlerId = $this->getHandlerId($nestedHandler);
@@ -938,7 +939,40 @@ private function getHandlerClassByType($handlerType)
938939
'insightops' => 'Monolog\Handler\InsightOpsHandler',
939940
];
940941

942+
$v2HandlerTypesAdded = [
943+
'elasticsearch' => 'Monolog\Handler\ElasticaHandler',
944+
'fallbackgroup' => 'Monolog\Handler\FallbackGroupHandler',
945+
'logmatic' => 'Monolog\Handler\LogmaticHandler',
946+
'noop' => 'Monolog\Handler\NoopHandler',
947+
'overflow' => 'Monolog\Handler\OverflowHandler',
948+
'process' => 'Monolog\Handler\ProcessHandler',
949+
'sendgrid' => 'Monolog\Handler\SendGridHandler',
950+
'sqs' => 'Monolog\Handler\SqsHandler',
951+
'telegram' => 'Monolog\Handler\TelegramBotHandler',
952+
];
953+
954+
$v2HandlerTypesRemoved = [
955+
'hipchat',
956+
'raven',
957+
'slackbot',
958+
];
959+
960+
if (Logger::API === 2) {
961+
$typeToClassMapping = array_merge($typeToClassMapping, $v2HandlerTypesAdded);
962+
foreach($v2HandlerTypesRemoved as $v2HandlerTypeRemoved) {
963+
unset($typeToClassMapping[$v2HandlerTypeRemoved]);
964+
}
965+
}
966+
941967
if (!isset($typeToClassMapping[$handlerType])) {
968+
if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesAdded)) {
969+
throw new \InvalidArgumentException(sprintf('"%s" was added in Monolog v2, please upgrade if you wish to use it.', $handlerType));
970+
}
971+
972+
if (Logger::API === 2 && array_key_exists($handlerType, $v2HandlerTypesRemoved)) {
973+
throw new \InvalidArgumentException(sprintf('"%s" was removed in Monolog v2.', $handlerType));
974+
}
975+
942976
throw new \InvalidArgumentException(sprintf('There is no handler class defined for handler "%s".', $handlerType));
943977
}
944978

Tests/DependencyInjection/MonologExtensionTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Bundle\MonologBundle\Tests\DependencyInjection;
1313

14+
use InvalidArgumentException;
15+
use Monolog\Logger;
1416
use Symfony\Bundle\MonologBundle\DependencyInjection\MonologExtension;
1517
use Symfony\Bundle\MonologBundle\DependencyInjection\Compiler\LoggerChannelPass;
1618
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -532,6 +534,67 @@ public function testFingersCrossedHandlerWhenExcludedHttpCodesAreSpecified()
532534
$this->assertDICConstructorArguments($handler, [new Reference('monolog.handler.nested'), new Reference('monolog.handler.main.http_code_strategy'), 0, true, true, null]);
533535
}
534536

537+
/**
538+
* @param string $handlerType
539+
* @dataProvider v2RemovedDataProvider
540+
*/
541+
public function testV2Removed($handlerType)
542+
{
543+
if (Logger::API === 1) {
544+
$this->markTestSkipped('Not valid for V1');
545+
546+
return;
547+
}
548+
549+
$this->expectException(InvalidArgumentException::class);
550+
$this->expectExceptionMessage(sprintf('"%s" was removed in Monolog v2.', $handlerType));
551+
552+
$container = new ContainerBuilder();
553+
$loader = new MonologExtension();
554+
555+
$loader->load([['handlers' => ['main' => ['type' => $handlerType]]]], $container);
556+
}
557+
558+
public function v2RemovedDataProvider()
559+
{
560+
return [
561+
['hipchat'],
562+
['raven'],
563+
['slackbot'],
564+
];
565+
}
566+
567+
/**
568+
* @param string $handlerType
569+
* @dataProvider v1AddedDataProvider
570+
*/
571+
public function testV2AddedOnV1($handlerType)
572+
{
573+
if (Logger::API === 2) {
574+
$this->markTestSkipped('Not valid for V2');
575+
576+
return;
577+
}
578+
579+
$this->expectException(InvalidArgumentException::class);
580+
$this->expectExceptionMessage(
581+
sprintf('"%s" was added in Monolog v2, please upgrade if you wish to use it.', $handlerType)
582+
);
583+
584+
$container = new ContainerBuilder();
585+
$loader = new MonologExtension();
586+
587+
$loader->load([['handlers' => ['main' => ['type' => $handlerType]]]], $container);
588+
}
589+
590+
public function v1AddedDataProvider()
591+
{
592+
return [
593+
['fallbackgroup'],
594+
];
595+
}
596+
597+
535598
protected function getContainer(array $config = [], array $thirdPartyDefinitions = [])
536599
{
537600
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)