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

时间:2018-04-25 15:15:19

标签: symfony

我正在尝试使用ExceptionListener类中的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);
    }
}

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

我尝试LoggerInterface函数onKernelException参数(自动装配?)但没有成功。

我应该在service.yaml文件中进行一些额外的配置吗?

App\EventListener\ExceptionListener:
    tags:
        - { name: kernel.event_listener, event: kernel.exception }

1 个答案:

答案 0 :(得分:3)

默认情况下在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);
    }
}