在Symfony 4中访问ExceptionListener中的记录器

Dav*_*vid 1 symfony

我正在尝试使用ExceptionListener类中的logger服务记录一些信息,但我不了解如何访问/创建logger对象。

这是我的代码:

class ExceptionListener
{

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        ...
        $exception = $event->getException();
        if ($exception instanceof HttpExceptionInterface) {
            // HTTP Exception (400, 401, 404, ...)
            $response = new JsonResponse(...)
        }
        ...
        $event->setResponse($response);
    }
}
Run Code Online (Sandbox Code Playgroud)

侦听器可以正常工作,但在这种情况下,默认情况下不会将任何日志记录到dev.log文件中(当然,日志记录已启用并且可以正常运行)。

我试图对函数使用LoggerInterface参数onKernelException(自动装配?),但没有成功。

我应该在service.yaml文件中进行一些其他配置吗?

App\EventListener\ExceptionListener:
    tags:
        - { name: kernel.event_listener, event: kernel.exception }
Run Code Online (Sandbox Code Playgroud)

Aur*_*ien 5

在SF4上默认为自动装配,您应该能够将LoggerInterface注入到您的侦听器中,而无需进行进一步的配置,例如这样(然后在需要时调用$ this-> logger):

use Psr\Log\LoggerInterface;
class ExceptionListener
{
    protected $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        ...
        $exception = $event->getException();
        if ($exception instanceof HttpExceptionInterface) {
            // HTTP Exception (400, 401, 404, ...)
            $response = new JsonResponse(...)
        }
        ...
        $event->setResponse($response);
    }
}
Run Code Online (Sandbox Code Playgroud)