From 783c48dba53a5fc1926e5878ef7a86b81f65470c Mon Sep 17 00:00:00 2001 From: Maxime AURIAU Date: Mon, 1 Oct 2018 17:38:13 +0200 Subject: [PATCH] Log errors from graphQl result --- .../OverblogGraphQLExtension.php | 2 +- src/EventListener/ErrorHandlerListener.php | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/DependencyInjection/OverblogGraphQLExtension.php b/src/DependencyInjection/OverblogGraphQLExtension.php index bcef047d4..5cdb753b2 100644 --- a/src/DependencyInjection/OverblogGraphQLExtension.php +++ b/src/DependencyInjection/OverblogGraphQLExtension.php @@ -187,7 +187,7 @@ private function setErrorHandler(array $config, ContainerBuilder $container): vo $errorHandlerListenerDefinition = $container->setDefinition(ErrorHandlerListener::class, new Definition(ErrorHandlerListener::class)); $errorHandlerListenerDefinition->setPublic(true) - ->setArguments([new Reference($id), $config['errors_handler']['rethrow_internal_exceptions'], $config['errors_handler']['debug']]) + ->setArguments([new Reference($id), new Reference(ErrorHandlerListener::DEFAULT_LOGGER_SERVICE), $config['errors_handler']['rethrow_internal_exceptions'], $config['errors_handler']['debug']]) ->addTag('kernel.event_listener', ['event' => Events::POST_EXECUTOR, 'method' => 'onPostExecutor']) ; diff --git a/src/EventListener/ErrorHandlerListener.php b/src/EventListener/ErrorHandlerListener.php index 32071e43e..6253ed8fb 100644 --- a/src/EventListener/ErrorHandlerListener.php +++ b/src/EventListener/ErrorHandlerListener.php @@ -6,9 +6,13 @@ use Overblog\GraphQLBundle\Error\ErrorHandler; use Overblog\GraphQLBundle\Event\ExecutorResultEvent; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; final class ErrorHandlerListener { + public const DEFAULT_LOGGER_SERVICE = 'logger'; + /** @var ErrorHandler */ private $errorHandler; @@ -18,16 +22,29 @@ final class ErrorHandlerListener /** @var bool */ private $debug; - public function __construct(ErrorHandler $errorHandler, $throwException = false, $debug = false) - { + /** @var LoggerInterface */ + private $logger; + + public function __construct( + ErrorHandler $errorHandler, + LoggerInterface $logger, + bool $throwException = false, + bool $debug = false + ) { $this->errorHandler = $errorHandler; $this->throwException = $throwException; $this->debug = $debug; + $this->logger = null === $logger ? new NullLogger() : $logger; } public function onPostExecutor(ExecutorResultEvent $executorResultEvent): void { $result = $executorResultEvent->getResult(); $this->errorHandler->handleErrors($result, $this->throwException, $this->debug); + $result = $result->toArray(); + + if (isset($result['errors'])) { + $this->logger->error(__METHOD__.' : '.\json_encode($result['errors'])); + } } }