From 9b5d841586b1caa122dde6c086005641d3a62ce0 Mon Sep 17 00:00:00 2001 From: Sztig Date: Fri, 22 May 2026 13:35:35 +0200 Subject: [PATCH] added new listener and log channel to handle ArgumentsException logging --- .../IbexaGraphQLExtension.php | 1 + .../Resources/config/services/services.yaml | 4 ++ .../ArgumentsExceptionListener.php | 46 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/lib/EventListener/ArgumentsExceptionListener.php 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(); + } +}