Le logging s'effectue avec monolog: https://symfony.com/doc/5.4/logging.html
Les logs sont traités par channels (ex : security, doctrine, http...) On peut consulter la liste des channels actifs avec la commande :
./bin/console debug:container monolog.log
Pour enregistrer un nouveau canal, on configure le service dans config/services.yaml:
App\Service\MyService:
tags:
- { name: monolog.logger, channel: my_channel }
Certains handlers sont communs à différents canaux : stderr, console, critical On se contente alors d'exclure les canaux non pertinents avec la syntaxe suivante:
channels: ["!event", "!doctrine"]
D'autres sont plus spécifiques, comme les différents rotating_files. On définit un ou plusieurs canaux
concernés :
file_main:
type: rotating_file
[...]
channels: ["logger", "php", "doctrine", "http_client", "elastica"]
file_auth:
type: rotating_file
[...]
channels: security
Enfin, d'autres sont vraiment dédiés à des process particuliers, comme des opérations d'export ou de synchronisation.
Tous les loggers (exceptés event et event) transmettent les messages de niveau ERROR ou plus vers la sortie
d'erreur stderr de php. Le stream est ensuite géré par le serveur apache, nginx ou autre.
La console associe automatiquement les niveaux de log avec la verbosité attendue :
| LoggerInterface | Verbosity | Command line |
|---|---|---|
| ->error() | OutputInterface::VERBOSITY_QUIET | stderr |
| ->warning() | OutputInterface::VERBOSITY_NORMAL | stdout |
| ->notice() | OutputInterface::VERBOSITY_VERBOSE | -v |
| ->info() | OutputInterface::VERBOSITY_VERY_VERBOSE | -vv |
| ->debug() | OutputInterface::VERBOSITY_DEBUG | -vvv |
Voir: https://symfony.com/doc/current/logging/monolog_console.html
Les canaux natifs ou custom sont par défaut gérés par un handler de type rotating_file qui logue les messages
dans var/log/{env}.main.log
Certains canaux sont gérés par un handler particulier et logués dans des fichiers spécifiques. Par ex,
le canal security est redirigé vers var/log/{env}.auth.log
En cas d'erreur de niveau critical ou supérieur, un handler de type finger_crossed passe les logs à un handler
de type mailer (par l'intermédiaire d'un handler deduplicated qui évitera les lignes en doublon).
Le handler mailer envoie ensuite un mail à l'exploitation.