logging.md 2.6 KB

Logging

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 }

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.