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