# Logging Le logging s'effectue avec monolog: 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 } ## Canaux et traitements ### Principe général 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. #### stderr 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. #### console 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 #### rotating_files (main, et particuliers) 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` #### critical 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.