diff --git a/src/Resources/config/services.yml b/src/Resources/config/services.yml index 2351f9d..98c1eee 100644 --- a/src/Resources/config/services.yml +++ b/src/Resources/config/services.yml @@ -18,6 +18,7 @@ services: arguments: - "@api_response.generator.api_response" - "@api_response.compiler.api_config" + - "@logger" - %kernel.debug% # Factory diff --git a/src/Subscriber/ApiResponseSubscriber.php b/src/Subscriber/ApiResponseSubscriber.php index fd7eb23..70fed42 100644 --- a/src/Subscriber/ApiResponseSubscriber.php +++ b/src/Subscriber/ApiResponseSubscriber.php @@ -6,6 +6,7 @@ use MattJanssen\ApiResponseBundle\Compiler\ApiConfigCompiler; use MattJanssen\ApiResponseBundle\Exception\ApiResponseExceptionInterface; use MattJanssen\ApiResponseBundle\Generator\ApiResponseGenerator; +use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -44,6 +45,13 @@ class ApiResponseSubscriber implements EventSubscriberInterface */ private $configCompiler; + /** + * PSR Logger + * + * @var LoggerInterface + */ + private $logger; + /** * Kernel's Debug Status * @@ -56,15 +64,18 @@ class ApiResponseSubscriber implements EventSubscriberInterface * * @param ApiResponseGenerator $responseGenerator * @param ApiConfigCompiler $configCompiler + * @param LoggerInterface $logger * @param bool $debug */ public function __construct( ApiResponseGenerator $responseGenerator, ApiConfigCompiler $configCompiler, + LoggerInterface $logger, $debug ) { $this->responseGenerator = $responseGenerator; $this->configCompiler = $configCompiler; + $this->logger = $logger; $this->debug = $debug; } @@ -210,6 +221,14 @@ public function onKernelException(GetResponseForExceptionEvent $event) ); $event->setResponse($response); + + if ($httpCode >= Response::HTTP_INTERNAL_SERVER_ERROR) { + // Log exceptions that result in a 5xx server response. + $this->logger->critical( + sprintf('API Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()), + ['exception' => $exception] + ); + } } /**