From 30963a84aabe1bfb81bd1dcac560c4b1accebfaa Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Sat, 31 Aug 2019 22:40:35 +0200 Subject: [PATCH 1/8] Init wiring up of v2 only handlers --- DependencyInjection/MonologExtension.php | 32 +++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index 519ace01..65c71633 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -11,6 +11,7 @@ namespace Symfony\Bundle\MonologBundle\DependencyInjection; +use InvalidArgumentException; use Monolog\Logger; use Monolog\Processor\ProcessorInterface; use Monolog\ResettableInterface; @@ -467,6 +468,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler case 'group': case 'whatfailuregroup': + case 'fallbackgroup': $references = []; foreach ($handler['members'] as $nestedHandler) { $nestedHandlerId = $this->getHandlerId($nestedHandler); @@ -479,7 +481,6 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler $handler['bubble'], ]); break; - case 'syslog': $definition->setArguments([ $handler['ident'], @@ -857,7 +858,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler $nullWarning = ', if you meant to define a null handler in a yaml config, make sure you quote "null" so it does not get converted to a php null'; } - throw new \InvalidArgumentException(sprintf('Invalid handler type "%s" given for handler "%s"' . $nullWarning, $handler['type'], $name)); + throw new InvalidArgumentException(sprintf('Invalid handler type "%s" given for handler "%s"' . $nullWarning, $handler['type'], $name)); } if (!empty($handler['nested']) && true === $handler['nested']) { @@ -938,8 +939,33 @@ private function getHandlerClassByType($handlerType) 'insightops' => 'Monolog\Handler\InsightOpsHandler', ]; + $typeToClassMappingV2Added = [ + 'fallbackgroup' => 'Monolog\Handler\FallbackGroupHandler', + ]; + + $typeToClassMappingV2Removed = [ + 'hipchat', + 'raven', + ]; + + if (Logger::API === 2) { + $typeToClassMapping = array_merge($typeToClassMapping, $typeToClassMappingV2Added); + + foreach($typeToClassMappingV2Removed as $key) { + unset($typeToClassMapping[$key]); + } + } + if (!isset($typeToClassMapping[$handlerType])) { - throw new \InvalidArgumentException(sprintf('There is no handler class defined for handler "%s".', $handlerType)); + if (array_key_exists($handlerType, $typeToClassMappingV2Added)) { + throw new InvalidArgumentException( + sprintf('"%s" was added in MonoLog 2.', $handlerType) + ); + } + + throw new InvalidArgumentException( + sprintf('There is no handler class defined for handler "%s".', $handlerType) + ); } return $typeToClassMapping[$handlerType]; From 79f126921ba031aad8b24258903981fe50357d58 Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Sat, 31 Aug 2019 22:43:45 +0200 Subject: [PATCH 2/8] Tidy up --- DependencyInjection/MonologExtension.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index 65c71633..411af175 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -481,6 +481,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler $handler['bubble'], ]); break; + case 'syslog': $definition->setArguments([ $handler['ident'], @@ -939,27 +940,27 @@ private function getHandlerClassByType($handlerType) 'insightops' => 'Monolog\Handler\InsightOpsHandler', ]; - $typeToClassMappingV2Added = [ + $v2HandlerTypesAdded = [ 'fallbackgroup' => 'Monolog\Handler\FallbackGroupHandler', ]; - $typeToClassMappingV2Removed = [ + $v2HandlerTypesRemoved = [ 'hipchat', 'raven', ]; if (Logger::API === 2) { - $typeToClassMapping = array_merge($typeToClassMapping, $typeToClassMappingV2Added); + $typeToClassMapping = array_merge($typeToClassMapping, $v2HandlerTypesAdded); - foreach($typeToClassMappingV2Removed as $key) { - unset($typeToClassMapping[$key]); + foreach($v2HandlerTypesRemoved as $handlerType) { + unset($typeToClassMapping[$handlerType]); } } if (!isset($typeToClassMapping[$handlerType])) { - if (array_key_exists($handlerType, $typeToClassMappingV2Added)) { + if (array_key_exists($handlerType, $v2HandlerTypesAdded)) { throw new InvalidArgumentException( - sprintf('"%s" was added in MonoLog 2.', $handlerType) + sprintf('"%s" was added in MonoLog 2, please upgrade if you wish to use.', $handlerType) ); } From 69e9e4b3238c82736f6a2f1540833a2d5fa925eb Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Sun, 1 Sep 2019 12:18:55 +0200 Subject: [PATCH 3/8] Improve validation --- DependencyInjection/MonologExtension.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index 411af175..fdf56c30 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -951,16 +951,21 @@ private function getHandlerClassByType($handlerType) if (Logger::API === 2) { $typeToClassMapping = array_merge($typeToClassMapping, $v2HandlerTypesAdded); - foreach($v2HandlerTypesRemoved as $handlerType) { unset($typeToClassMapping[$handlerType]); } } if (!isset($typeToClassMapping[$handlerType])) { - if (array_key_exists($handlerType, $v2HandlerTypesAdded)) { + if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesAdded)) { + throw new InvalidArgumentException( + sprintf('"%s" was added in MonoLog v2, please upgrade if you wish to use.', $handlerType) + ); + } + + if (Logger::API === 2 && array_key_exists($handlerType, $v2HandlerTypesRemoved)) { throw new InvalidArgumentException( - sprintf('"%s" was added in MonoLog 2, please upgrade if you wish to use.', $handlerType) + sprintf('"%s" was removed in MonoLog v2.', $handlerType) ); } From 63176d99236d3507b12c915b087aa96a2e4ee46b Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Mon, 2 Sep 2019 13:39:20 +0200 Subject: [PATCH 4/8] Fix bug and add deprecated warning for removed --- DependencyInjection/MonologExtension.php | 12 ++++++-- .../MonologExtensionTest.php | 30 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index fdf56c30..ec1e3220 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -947,15 +947,23 @@ private function getHandlerClassByType($handlerType) $v2HandlerTypesRemoved = [ 'hipchat', 'raven', + 'slackbot', ]; if (Logger::API === 2) { $typeToClassMapping = array_merge($typeToClassMapping, $v2HandlerTypesAdded); - foreach($v2HandlerTypesRemoved as $handlerType) { - unset($typeToClassMapping[$handlerType]); + foreach($v2HandlerTypesRemoved as $v2HandlerTypeRemoved) { + unset($typeToClassMapping[$v2HandlerTypeRemoved]); } } + if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesRemoved)) { + @trigger_error( + sprintf('"%s" is deprecated and will be removed in MonoLog v2.', $handlerType), + E_USER_DEPRECATED + ); + } + if (!isset($typeToClassMapping[$handlerType])) { if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesAdded)) { throw new InvalidArgumentException( diff --git a/Tests/DependencyInjection/MonologExtensionTest.php b/Tests/DependencyInjection/MonologExtensionTest.php index 41f31b4f..2fe12459 100644 --- a/Tests/DependencyInjection/MonologExtensionTest.php +++ b/Tests/DependencyInjection/MonologExtensionTest.php @@ -11,6 +11,7 @@ namespace Symfony\Bundle\MonologBundle\Tests\DependencyInjection; +use Monolog\Logger; use Symfony\Bundle\MonologBundle\DependencyInjection\MonologExtension; use Symfony\Bundle\MonologBundle\DependencyInjection\Compiler\LoggerChannelPass; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -532,6 +533,35 @@ public function testFingersCrossedHandlerWhenExcludedHttpCodesAreSpecified() $this->assertDICConstructorArguments($handler, [new Reference('monolog.handler.nested'), new Reference('monolog.handler.main.http_code_strategy'), 0, true, true, null]); } + /** + * @param string $handlerType + * @dataProvider v2RemovedDataProvider + */ + public function testMonologV2RemovedOnV1($handlerType) + { + if (Logger::API === 2) { + $this->doesNotPerformAssertions(); + + return; + } + + $this->expectException(InvalidConfigurationException::class); + + $container = new ContainerBuilder(); + $loader = new MonologExtension(); + + $loader->load([['handlers' => ['main' => ['type' => $handlerType]]]], $container); + } + + public function v2RemovedDataProvider() + { + return [ + ['hipchat'], + ['raven'], + ['slackbot'], + ]; + } + protected function getContainer(array $config = [], array $thirdPartyDefinitions = []) { $container = new ContainerBuilder(); From 8e6ff5d35fefec40aa836cd5bca110aa6aa21d65 Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Mon, 2 Sep 2019 22:57:18 +0200 Subject: [PATCH 5/8] Improve tests --- .../MonologExtensionTest.php | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/Tests/DependencyInjection/MonologExtensionTest.php b/Tests/DependencyInjection/MonologExtensionTest.php index 2fe12459..25b780e7 100644 --- a/Tests/DependencyInjection/MonologExtensionTest.php +++ b/Tests/DependencyInjection/MonologExtensionTest.php @@ -11,6 +11,7 @@ namespace Symfony\Bundle\MonologBundle\Tests\DependencyInjection; +use InvalidArgumentException; use Monolog\Logger; use Symfony\Bundle\MonologBundle\DependencyInjection\MonologExtension; use Symfony\Bundle\MonologBundle\DependencyInjection\Compiler\LoggerChannelPass; @@ -537,15 +538,16 @@ public function testFingersCrossedHandlerWhenExcludedHttpCodesAreSpecified() * @param string $handlerType * @dataProvider v2RemovedDataProvider */ - public function testMonologV2RemovedOnV1($handlerType) + public function testV2Removed($handlerType) { - if (Logger::API === 2) { - $this->doesNotPerformAssertions(); + if (Logger::API === 1) { + $this->markTestSkipped('Not valid for V1'); return; } - $this->expectException(InvalidConfigurationException::class); + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage(sprintf('"%s" was removed in MonoLog v2.', $handlerType)); $container = new ContainerBuilder(); $loader = new MonologExtension(); @@ -562,6 +564,37 @@ public function v2RemovedDataProvider() ]; } + /** + * @param string $handlerType + * @dataProvider v1AddedDataProvider + */ + public function testV2AddedOnV1($handlerType) + { + if (Logger::API === 2) { + $this->markTestSkipped('Not valid for V2'); + + return; + } + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage( + sprintf('"%s" was added in MonoLog v2, please upgrade if you wish to use.', $handlerType) + ); + + $container = new ContainerBuilder(); + $loader = new MonologExtension(); + + $loader->load([['handlers' => ['main' => ['type' => $handlerType]]]], $container); + } + + public function v1AddedDataProvider() + { + return [ + ['fallbackgroup'], + ]; + } + + protected function getContainer(array $config = [], array $thirdPartyDefinitions = []) { $container = new ContainerBuilder(); From 78f131a960f969f02eac788a14cc72a3fb65d2fe Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Tue, 3 Sep 2019 21:28:03 +0200 Subject: [PATCH 6/8] Undo deprecation --- DependencyInjection/MonologExtension.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index ec1e3220..2fdfa31d 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -957,13 +957,6 @@ private function getHandlerClassByType($handlerType) } } - if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesRemoved)) { - @trigger_error( - sprintf('"%s" is deprecated and will be removed in MonoLog v2.', $handlerType), - E_USER_DEPRECATED - ); - } - if (!isset($typeToClassMapping[$handlerType])) { if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesAdded)) { throw new InvalidArgumentException( From 28fd5a5ebded3f97cd1d9b58fa5bc5d855e3eb24 Mon Sep 17 00:00:00 2001 From: Malachi Soord Date: Tue, 24 Sep 2019 20:16:32 +0200 Subject: [PATCH 7/8] Add more handlers --- DependencyInjection/MonologExtension.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index 2fdfa31d..1341297e 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -941,7 +941,15 @@ private function getHandlerClassByType($handlerType) ]; $v2HandlerTypesAdded = [ + 'elasticsearch' => 'Monolog\Handler\ElasticaHandler', 'fallbackgroup' => 'Monolog\Handler\FallbackGroupHandler', + 'logmatic' => 'Monolog\Handler\LogmaticHandler', + 'noop' => 'Monolog\Handler\NoopHandler', + 'overflow' => 'Monolog\Handler\OverflowHandler', + 'process' => 'Monolog\Handler\ProcessHandler', + 'sendgrid' => 'Monolog\Handler\SendGridHandler', + 'sqs' => 'Monolog\Handler\SqsHandler', + 'telegram' => 'Monolog\Handler\TelegramBotHandler', ]; $v2HandlerTypesRemoved = [ From 79cc3ffb8687553ef935340fef6ee660e48103df Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 13 Nov 2019 13:35:20 +0100 Subject: [PATCH 8/8] Fix CS --- DependencyInjection/MonologExtension.php | 15 ++++----------- .../DependencyInjection/MonologExtensionTest.php | 4 ++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/DependencyInjection/MonologExtension.php b/DependencyInjection/MonologExtension.php index 1341297e..f091916b 100644 --- a/DependencyInjection/MonologExtension.php +++ b/DependencyInjection/MonologExtension.php @@ -11,7 +11,6 @@ namespace Symfony\Bundle\MonologBundle\DependencyInjection; -use InvalidArgumentException; use Monolog\Logger; use Monolog\Processor\ProcessorInterface; use Monolog\ResettableInterface; @@ -859,7 +858,7 @@ private function buildHandler(ContainerBuilder $container, $name, array $handler $nullWarning = ', if you meant to define a null handler in a yaml config, make sure you quote "null" so it does not get converted to a php null'; } - throw new InvalidArgumentException(sprintf('Invalid handler type "%s" given for handler "%s"' . $nullWarning, $handler['type'], $name)); + throw new \InvalidArgumentException(sprintf('Invalid handler type "%s" given for handler "%s"' . $nullWarning, $handler['type'], $name)); } if (!empty($handler['nested']) && true === $handler['nested']) { @@ -967,20 +966,14 @@ private function getHandlerClassByType($handlerType) if (!isset($typeToClassMapping[$handlerType])) { if (Logger::API === 1 && array_key_exists($handlerType, $v2HandlerTypesAdded)) { - throw new InvalidArgumentException( - sprintf('"%s" was added in MonoLog v2, please upgrade if you wish to use.', $handlerType) - ); + throw new \InvalidArgumentException(sprintf('"%s" was added in Monolog v2, please upgrade if you wish to use it.', $handlerType)); } if (Logger::API === 2 && array_key_exists($handlerType, $v2HandlerTypesRemoved)) { - throw new InvalidArgumentException( - sprintf('"%s" was removed in MonoLog v2.', $handlerType) - ); + throw new \InvalidArgumentException(sprintf('"%s" was removed in Monolog v2.', $handlerType)); } - throw new InvalidArgumentException( - sprintf('There is no handler class defined for handler "%s".', $handlerType) - ); + throw new \InvalidArgumentException(sprintf('There is no handler class defined for handler "%s".', $handlerType)); } return $typeToClassMapping[$handlerType]; diff --git a/Tests/DependencyInjection/MonologExtensionTest.php b/Tests/DependencyInjection/MonologExtensionTest.php index 25b780e7..398e7fc6 100644 --- a/Tests/DependencyInjection/MonologExtensionTest.php +++ b/Tests/DependencyInjection/MonologExtensionTest.php @@ -547,7 +547,7 @@ public function testV2Removed($handlerType) } $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage(sprintf('"%s" was removed in MonoLog v2.', $handlerType)); + $this->expectExceptionMessage(sprintf('"%s" was removed in Monolog v2.', $handlerType)); $container = new ContainerBuilder(); $loader = new MonologExtension(); @@ -578,7 +578,7 @@ public function testV2AddedOnV1($handlerType) $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage( - sprintf('"%s" was added in MonoLog v2, please upgrade if you wish to use.', $handlerType) + sprintf('"%s" was added in Monolog v2, please upgrade if you wish to use it.', $handlerType) ); $container = new ContainerBuilder();