<?php
namespace App\Subscriber;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Mime\Email;
class FailedImportLogMessageSubscriber implements EventSubscriberInterface
{
private ?object $loggerImport;
private MailerInterface $mailer;
/**
* @param ContainerInterface $container
* @param MailerInterface $mailer
*/
public function __construct(ContainerInterface $container, MailerInterface $mailer){
$this->loggerImport = $container->get('monolog.logger.import');
$this->mailer = $mailer;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
WorkerMessageFailedEvent::class => 'onFailedMessage'
];
}
/**
* @param WorkerMessageFailedEvent $event
* @throws TransportExceptionInterface
*/
public function onFailedMessage(WorkerMessageFailedEvent $event){
$message = $event->getEnvelope()->getMessage();
$trace = $event->getThrowable()->getTraceAsString();
$this->loggerImport->error(get_class($message).'\n'.$trace);
$email = (new Email());
$email->from('noreply@kromi.fr');
$email->to('developers@kromi.fr');
$email->subject('Erreur : Kromi - Occupation : Import des logs');
$email->text(<<<TEXT
Une erreur est survenue lors de l'import des logs
TEXT);
$this->mailer->send($email);
}
}