Skip to content

Commit

Permalink
IBX-5027: Added logging exceptions for REST
Browse files Browse the repository at this point in the history
  • Loading branch information
Steveb-p committed Feb 6, 2023
1 parent 4ea7b0e commit 3215715
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
31 changes: 28 additions & 3 deletions src/bundle/EventListener/ResponseListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,25 @@
namespace Ibexa\Bundle\Rest\EventListener;

use Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerAwareTrait;
use Psr\Log\LogLevel;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Throwable;

/**
* REST Response Listener.
*
* Converts responses from REST controllers to REST Responses, depending on the Accept-Header value.
*/
class ResponseListener implements EventSubscriberInterface
class ResponseListener implements EventSubscriberInterface, LoggerAwareInterface
{
use LoggerAwareTrait;

/**
* @var \Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher
*/
Expand Down Expand Up @@ -73,13 +80,31 @@ public function onKernelExceptionView(ExceptionEvent $event)
return;
}

$exception = $event->getThrowable();
$this->logException($exception);

$event->setResponse(
$this->viewDispatcher->dispatch(
$event->getRequest(),
$event->getThrowable()
$exception
)
);
$event->stopPropagation();
}

private function logException(Throwable $exception): void
{
if (!isset($this->logger)) {
return;
}

$logLevel = LogLevel::ERROR;
if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
$logLevel = LogLevel::CRITICAL;
}

$this->logger->log($logLevel, $exception->getMessage(), [
'exception' => $exception,
]);
}
}

Expand Down
3 changes: 3 additions & 0 deletions src/bundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,11 @@ services:
Ibexa\Bundle\Rest\EventListener\ResponseListener:
arguments:
- '@Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher'
calls:
- ['setLogger', ['@?logger']]
tags:
- { name: kernel.event_subscriber }
- { name: monolog.logger, channel: request }

Ibexa\Bundle\Rest\EventListener\CsrfListener:
arguments:
Expand Down

0 comments on commit 3215715

Please sign in to comment.