Symfony 5 | Recevoir les erreurs serveur par mails avec monolog, swiftmailer et maildev

Développeur web Front-End dans l'Oise - Gary Deshayes <--Translation

Crée le : dimanche 31 octobre 2021


Prérequis du tutoriel :

Installer monolog https://packagist.org/packages/symfony/monolog-bundle (Permet de recevoir les erreurs serveur par mail)

Installer maildev https://github.com/maildev/maildev (Permet de créer un serveur SMTP local)

Installer swiftmailer https://packagist.org/packages/symfony/swiftmailer-bundle (Permet d'envoyer des mails sous Symfony)

Configurer Monolog :

Allez dans le fichier monolog.yaml dans le dossier config/packages/dev (ou prod pour la prod..)

Et définissez les options comme dans l'encadré si dessous pour recevoir les erreurs critique (donc 5XX) mais il est également possible de configurer les erreurs 4XX : Voir plus d'options

Dans la partie "swift" nous définissons qui envoie le mail, qui recevra le mail, ainsi que le sujet de l'email.

# config/packages/dev/monolog.yaml
monolog:
  handlers:
    main:
      type: fingers_crossed
      # 500 errors are logged at the critical level
      action_level: critical
      # to also log 400 level errors (but not 404's):
      # action_level: error
      # excluded_404s:
      #     - ^/
      handler: deduplicated
    deduplicated:
      type: deduplication
      handler: swift
    swift:
      type: swift_mailer
      from_email: 'error@example.com'
      to_email: 'error@example.com'
      # or list of recipients
      # to_email:   ['dev1@example.com', 'dev2@example.com', ...]                                             
      subject: 'An Error Occurred! %%message%%'
      level: debug
      formatter: monolog.formatter.html
      content_type: text/html

Configurer swiftmailer :

Dans le fichier swiftmailer.yaml dans le dossier config/packages, vous pouvez voir que l'url du SMTP est '%env(MAILER_URL)%' cela veut dire que la variable qui contient l'url est dans le fichier .env du projet, il faut donc aller le modifier directement là bas.

swiftmailer:
    url: '%env(MAILER_URL)%'
    spool: { type: 'memory' }

Dirigez vous donc vers le fichier .env et modifier le MAILER_URL comme ceci :

MAILER_URL=smtp://localhost:1025

Pour recevoir les mails en local sur l'interface maildev, sinon mettez les informations de votre SMTP En savoir plus.

Lancer maildev pour recevoir les mails en local :

Allez dans une invite de commande et lancez la commande "maildev":

MailDev webapp running at http://0.0.0.0:1080
MailDev SMTP Server running at 0.0.0.0:1025

Vous verez ces deux lignes apparaitre pour signaler le lancement du smtp local, les mails sont donc envoyé sur localhost:1025 et l'inteface est sur le port 1080.

Simulez une erreur sous Symfony :

Nous allons maintenant tenter d'envoyer un mail d'erreur à notre serveur SMTP.

Dans mon cas j'ai crée une erreur assez simple dans mon controller.

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class AppController extends AbstractController
{
    /**
     * @Route("/app", name="app")
     */
    public function app(): Response
    {
        $var = "";
        //L'erreur est ici car ->getError() n'existe pas
        dump($var->getError());
        return $this->json('error !');
    }
}

L'erreur est simple, getError n'existe pas ce qui va provoquer une erreur 5xx, ensuite monolog va intercepter cette erreur, et puisque nous avons défini que nous voulons toutes les erreurs 5xx par mails, il va l'envoyer via notre swiftmailer configuré pour envoyer les mails sur notre SMTP local via maildev.

Erreur symfony

Lorsque l'on accède à notre route nous avons cette erreur 500, qui est donc renvoyée à notre interface maildev:

Symfony maildev infoVoici l'interface maildev avec notre mail d'erreur, et si vous défilez vous pouvez trouver l'erreur critique qui à bloqué votre serveur:

Symfony maildev criticalVous pouvez maintenant recevoir les erreurs serveur de votre serveur Symfony via mail pour les résoudre plus rapidement en production.

 

Ce tutoriel est maintenant fini, merci pour votre lecture.

Articles récents :
Symfony

Crée le : lundi 1 novembre 2021

Javascript Framework JS

Crée le : dimanche 31 octobre 2021

Symfony

Crée le : mercredi 1 septembre 2021

Javascript Framework JS

Crée le : samedi 28 novembre 2020

Javascript SQL Framework JS

Crée le : dimanche 20 septembre 2020

Symfony Bugs

Crée le : dimanche 26 janvier 2020