diff --git a/src/bundle/DependencyInjection/IbexaGraphQLExtension.php b/src/bundle/DependencyInjection/IbexaGraphQLExtension.php index 1882026..727c974 100644 --- a/src/bundle/DependencyInjection/IbexaGraphQLExtension.php +++ b/src/bundle/DependencyInjection/IbexaGraphQLExtension.php @@ -73,6 +73,7 @@ public function prepend(ContainerBuilder $container) 'dir' => $container->getParameter('kernel.project_dir') . self::SCHEMA_DIR_PATH, ]; $container->prependExtensionConfig('overblog_graphql', $graphQLConfig); + $container->prependExtensionConfig('monolog', ['channels' => ['graphql']]); } /** diff --git a/src/bundle/Resources/config/services/services.yaml b/src/bundle/Resources/config/services/services.yaml index 5e2dd63..e9c8dd7 100644 --- a/src/bundle/Resources/config/services/services.yaml +++ b/src/bundle/Resources/config/services/services.yaml @@ -44,6 +44,10 @@ services: $provider: '@ibexa.siteaccess.provider' $siteAccessGroups: '%ibexa.site_access.groups%' + Ibexa\GraphQL\EventListener\ArgumentsExceptionListener: + arguments: + $logger: '@monolog.logger.graphql' + Ibexa\GraphQL\Mapper\ContentImageAssetMapperStrategy: arguments: $assetMapper: '@Ibexa\Core\FieldType\ImageAsset\AssetMapper' diff --git a/src/lib/EventListener/ArgumentsExceptionListener.php b/src/lib/EventListener/ArgumentsExceptionListener.php new file mode 100644 index 0000000..de7d214 --- /dev/null +++ b/src/lib/EventListener/ArgumentsExceptionListener.php @@ -0,0 +1,46 @@ +logger = $logger; + } + + public static function getSubscribedEvents(): array + { + return [ + Events::ERROR_FORMATTING => ['onErrorFormatting', 10], + ]; + } + + public function onErrorFormatting(ErrorFormattingEvent $event): void + { + $exception = $event->getError()->getPrevious(); + + if (!$exception instanceof ArgumentsException) { + return; + } + + $this->logger->critical( + sprintf('[GraphQL] %s: %s', ArgumentsException::class, $exception->getMessage()), + ['exception' => $exception] + ); + + $event->stopPropagation(); + } +}