Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Symfony 4中的ExceptionListener中访问记录器_Symfony - Fatal编程技术网

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

在Symfony 4中的ExceptionListener中访问记录器,symfony,Symfony,我试图在ExceptionListener类中使用logger服务记录一些信息,但我不知道如何访问/创建logger对象 以下是我的代码: class ExceptionListener { public function onKernelException(GetResponseForExceptionEvent $event) { ... $exception = $event->getException(); if (

我试图在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);
    }
}
监听器工作正常,但在这种情况下,默认情况下不会将任何内容记录到
dev.log
文件中(当然,日志记录已启用且功能正常)

我试图为
onKernelException
函数(自动连线?)设置一个
LoggerInterface
参数,但没有成功

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

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

在SF4上默认情况下是自动连接的,您应该能够将LoggerInterface注入到侦听器中,而无需进一步配置,如是(然后在需要时调用$this->logger):


在SF4上默认情况下是自动连接的,您应该能够将LoggerInterface注入到侦听器中,而无需进一步配置,如是(然后在需要时调用$this->logger):


将记录器插入到侦听器中。有很多例子。是的,我已经尝试过了,但是我有一个错误:
类型错误:传递给App\EventListener\ExceptionListener::onKernelException()的参数2必须实现接口Psr\Log\LoggerInterface,给定字符串,在/…中调用/第212行的vendor/symfony/event dispatcher/EventDispatcher.php将其注入构造函数。直接注入方法只对控制器动作有效。是的!它起作用了。添加了一个带有
日志接口的构造函数。我很愚蠢,因为我已经在代码的另一部分使用了这个方法。非常感谢大家!将记录器插入到侦听器中。有很多例子。是的,我已经尝试过了,但是我有一个错误:
类型错误:传递给App\EventListener\ExceptionListener::onKernelException()的参数2必须实现接口Psr\Log\LoggerInterface,给定字符串,在/…中调用/第212行的vendor/symfony/event dispatcher/EventDispatcher.php将其注入构造函数。直接注入方法只对控制器动作有效。是的!它起作用了。添加了一个带有
日志接口的构造函数。我很愚蠢,因为我已经在代码的另一部分使用了这个方法。非常感谢大家!是的,我已经尝试过了,但是我有一个错误:
类型错误:传递给App\EventListener\ExceptionListener::onKernelException()的参数2必须实现接口Psr\Log\LoggerInterface,给定字符串,在/…中调用/第212行的vendor/symfony/event dispatcher/EventDispatcher.php
我认为@David仍然在函数onKernelException中保留LoggerInterface参数。此参数必须转到构造函数(如本答案所示),onKernelException将只有一个参数。是的!它起作用了。添加了一个带有
日志接口的构造函数。我很愚蠢,因为我已经在代码的另一部分使用了这个方法。非常感谢大家!是的,我已经尝试过了,但是我有一个错误:
类型错误:传递给App\EventListener\ExceptionListener::onKernelException()的参数2必须实现接口Psr\Log\LoggerInterface,给定字符串,在/…中调用/第212行的vendor/symfony/event dispatcher/EventDispatcher.php
我认为@David仍然在函数onKernelException中保留LoggerInterface参数。此参数必须转到构造函数(如本答案所示),onKernelException将只有一个参数。是的!它起作用了。添加了一个带有
日志接口的构造函数。我很愚蠢,因为我已经在代码的另一部分使用了这个方法。非常感谢大家!
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);
    }
}