diff --git a/app/etc/di.xml b/app/etc/di.xml index dc884cb9fe29b..ed9f32a1bf267 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -209,7 +209,6 @@ - @@ -1757,4 +1756,61 @@ + + + + GraphQLClientLogger + GraphQLServerLogger + GraphQLGeneralLogger + + \GraphQL\Error\Error::CATEGORY_GRAPHQL + \Magento\Framework\GraphQl\Exception\GraphQlAlreadyExistsException::EXCEPTION_CATEGORY + \Magento\Framework\GraphQl\Exception\GraphQlAuthenticationException::EXCEPTION_CATEGORY + \Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException::EXCEPTION_CATEGORY + \Magento\Framework\GraphQl\Exception\GraphQlInputException::EXCEPTION_CATEGORY + \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException::EXCEPTION_CATEGORY + request + user + + + \GraphQL\Error\Error::CATEGORY_INTERNAL + + + + + + + GraphQLClientErrorHandler + + + + + + \Magento\Framework\GraphQl\Query\ErrorHandlerInterface::CLIENT_LOG_FILE + + + + + + GraphQLServerErrorHandler + + + + + + \Magento\Framework\GraphQl\Query\ErrorHandlerInterface::SERVER_LOG_FILE + + + + + + GraphQLGeneralErrorHandler + + + + + + \Magento\Framework\GraphQl\Query\ErrorHandlerInterface::GENERAL_LOG_FILE + + diff --git a/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandler.php b/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandler.php index 9fc3f9dc584e5..2f97ae238c6a7 100644 --- a/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandler.php +++ b/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandler.php @@ -14,6 +14,56 @@ */ class ErrorHandler implements ErrorHandlerInterface { + /** + * @var \Magento\Framework\Logger\Monolog + */ + private $clientLogger; + + /** + * @var \Magento\Framework\Logger\Monolog + */ + private $serverLogger; + + /** + * @var array + */ + private $clientErrorCategories; + + /** + * @var array + */ + private $serverErrorCategories; + + /** + * @var \Magento\Framework\Logger\Monolog + */ + private $generalLogger; + + /** + * ErrorHandler constructor. + * + * @param \Magento\Framework\Logger\Monolog $clientLogger + * @param \Magento\Framework\Logger\Monolog $serverLogger + * @param \Magento\Framework\Logger\Monolog $generalLogger + * @param array $clientErrorCategories + * @param array $serverErrorCategories + * + * @SuppressWarnings(PHPMD.LongVariable) + */ + public function __construct( + \Magento\Framework\Logger\Monolog $clientLogger, + \Magento\Framework\Logger\Monolog $serverLogger, + \Magento\Framework\Logger\Monolog $generalLogger, + array $clientErrorCategories = [], + array $serverErrorCategories = [] + ) { + $this->clientLogger = $clientLogger; + $this->serverLogger = $serverLogger; + $this->generalLogger = $generalLogger; + $this->clientErrorCategories = $clientErrorCategories; + $this->serverErrorCategories = $serverErrorCategories; + } + /** * Handle errors * @@ -24,6 +74,29 @@ class ErrorHandler implements ErrorHandlerInterface */ public function handle(array $errors, callable $formatter):array { - return array_map($formatter, $errors); + return array_map( + function (\GraphQL\Error\ClientAware $error) use ($formatter) { + $this->logError($error); + + return $formatter($error); + }, + $errors + ); + } + + /** + * @param \GraphQL\Error\ClientAware $error + * + * @return boolean + */ + private function logError(\GraphQL\Error\ClientAware $error):bool + { + if (in_array($error->getCategory(), $this->clientErrorCategories)) { + return $this->clientLogger->error($error); + } elseif (in_array($error->getCategory(), $this->serverErrorCategories)) { + return $this->serverLogger->error($error); + } + + return $this->generalLogger->error($error); } } diff --git a/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandlerInterface.php b/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandlerInterface.php index f1123864f4afc..f63468fa4ddb8 100644 --- a/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandlerInterface.php +++ b/lib/internal/Magento/Framework/GraphQl/Query/ErrorHandlerInterface.php @@ -14,6 +14,9 @@ */ interface ErrorHandlerInterface { + const SERVER_LOG_FILE = 'var/log/graphql/server/exception.log'; + const CLIENT_LOG_FILE = 'var/log/graphql/client/exception.log'; + const GENERAL_LOG_FILE = 'var/log/graphql/exception.log'; /** * Handle errors *