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
*