我的要求:每当应用程序发生错误时,将该错误日志发送到电子邮件。
我正在尝试将我们应用程序中发生的任何异常/错误日志发送到电子邮件。这是我尝试过的方法,但我没有收到电子邮件中的日志。
注意:电子邮件发送功能工作正常,因为我已经在测试控制器中对其进行了测试。但它不适用于此 Listener。
当我点击 TestController Index Route 时会发生什么?
当我访问index路由时,它抛出 500 个内部服务器错误(因为我们故意抛出异常)。但是,如果发生此异常,它应该将日志发送到电子邮件。因为在 ExceptionListener 中我已经编码了日志的电子邮件发送。但它不发送日志(:
异常监听器.php:
<?php
namespace App\EventListener;
use App\Service\EmailService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
class ExceptionListener
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function onKernelException(EmailService $emailService, ExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getThrowable();
$message = sprintf(
'My Error says: %s with code: %s',
$exception->getMessage(),
$exception->getCode()
);
try {
$emailService->sendLogToMail("myemail@gmail.com", $message);
} catch (TransportExceptionInterface $e) {
//
}
}
}
我已经在services.yaml中注册了监听器:
App\EventListener\ExceptionListener:
tags:
- { name: kernel.event_listener, event: kernel.exception }
我故意生成异常的TestController :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Exception;
class TestController extends AbstractController
{
public function index() {
throw new Exception("It's bad");
}
}
我正在使用 Symfony v4.4
蛊毒传说
明月笑刀无情