[HttpKernel] Decouple exception logging from rendering

This commit is contained in:
Roland Franssen 2017-12-06 18:47:01 +01:00
parent 3ce9c29ae4
commit a203d31838
4 changed files with 22 additions and 7 deletions

View File

@ -1,6 +1,11 @@
CHANGELOG
=========
4.1.0
-----
* `ExceptionListener` now logs and collects exceptions at priority `2048` (previously logged at `-128` and collected at `0`)
4.0.0
-----

View File

@ -37,14 +37,17 @@ class ExceptionListener implements EventSubscriberInterface
$this->logger = $logger;
}
public function logKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$this->logException($exception, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$request = $event->getRequest();
$this->logException($exception, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
$request = $this->duplicateRequest($exception, $request);
$request = $this->duplicateRequest($exception, $event->getRequest());
try {
$response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, false);
@ -72,7 +75,10 @@ class ExceptionListener implements EventSubscriberInterface
public static function getSubscribedEvents()
{
return array(
KernelEvents::EXCEPTION => array('onKernelException', -128),
KernelEvents::EXCEPTION => array(
array('logKernelException', 2048),
array('onKernelException', -128),
),
);
}

View File

@ -121,7 +121,7 @@ class ProfilerListener implements EventSubscriberInterface
{
return array(
KernelEvents::RESPONSE => array('onKernelResponse', -100),
KernelEvents::EXCEPTION => 'onKernelException',
KernelEvents::EXCEPTION => array('onKernelException', 2048),
KernelEvents::TERMINATE => array('onKernelTerminate', -1024),
);
}

View File

@ -51,11 +51,13 @@ class ExceptionListenerTest extends TestCase
$this->iniSet('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul');
$l = new ExceptionListener('foo');
$l->logKernelException($event);
$l->onKernelException($event);
$this->assertEquals(new Response('foo'), $event->getResponse());
try {
$l->logKernelException($event2);
$l->onKernelException($event2);
$this->fail('RuntimeException expected');
} catch (\RuntimeException $e) {
@ -72,11 +74,13 @@ class ExceptionListenerTest extends TestCase
$logger = new TestLogger();
$l = new ExceptionListener('foo', $logger);
$l->logKernelException($event);
$l->onKernelException($event);
$this->assertEquals(new Response('foo'), $event->getResponse());
try {
$l->logKernelException($event2);
$l->onKernelException($event2);
$this->fail('RuntimeException expected');
} catch (\RuntimeException $e) {