Skip to content

Commit 3215715

Browse files
authored
IBX-5027: Added logging exceptions for REST
1 parent 4ea7b0e commit 3215715

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/bundle/EventListener/ResponseListener.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,25 @@
77
namespace Ibexa\Bundle\Rest\EventListener;
88

99
use Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher;
10+
use Psr\Log\LoggerAwareInterface;
11+
use Psr\Log\LoggerAwareTrait;
12+
use Psr\Log\LogLevel;
1013
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1114
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
1215
use Symfony\Component\HttpKernel\Event\ViewEvent;
16+
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
1317
use Symfony\Component\HttpKernel\KernelEvents;
18+
use Throwable;
1419

1520
/**
1621
* REST Response Listener.
1722
*
1823
* Converts responses from REST controllers to REST Responses, depending on the Accept-Header value.
1924
*/
20-
class ResponseListener implements EventSubscriberInterface
25+
class ResponseListener implements EventSubscriberInterface, LoggerAwareInterface
2126
{
27+
use LoggerAwareTrait;
28+
2229
/**
2330
* @var \Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher
2431
*/
@@ -73,13 +80,31 @@ public function onKernelExceptionView(ExceptionEvent $event)
7380
return;
7481
}
7582

83+
$exception = $event->getThrowable();
84+
$this->logException($exception);
85+
7686
$event->setResponse(
7787
$this->viewDispatcher->dispatch(
7888
$event->getRequest(),
79-
$event->getThrowable()
89+
$exception
8090
)
8191
);
82-
$event->stopPropagation();
92+
}
93+
94+
private function logException(Throwable $exception): void
95+
{
96+
if (!isset($this->logger)) {
97+
return;
98+
}
99+
100+
$logLevel = LogLevel::ERROR;
101+
if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
102+
$logLevel = LogLevel::CRITICAL;
103+
}
104+
105+
$this->logger->log($logLevel, $exception->getMessage(), [
106+
'exception' => $exception,
107+
]);
83108
}
84109
}
85110

src/bundle/Resources/config/services.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,11 @@ services:
188188
Ibexa\Bundle\Rest\EventListener\ResponseListener:
189189
arguments:
190190
- '@Ibexa\Rest\Server\View\AcceptHeaderVisitorDispatcher'
191+
calls:
192+
- ['setLogger', ['@?logger']]
191193
tags:
192194
- { name: kernel.event_subscriber }
195+
- { name: monolog.logger, channel: request }
193196

194197
Ibexa\Bundle\Rest\EventListener\CsrfListener:
195198
arguments:

0 commit comments

Comments
 (0)