Navigation

Contactez-nous

Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81

Par Boris Morel (twitter accountBorisMorel) Dernière mise à jour : 27 mars 2013

Monolog en production

Le logger pour la production

Le logger est un composant indispensable pour la bonne gestion d'une plate-forme web. Sous Symfony2, Monolog est dédié à cette tâche. C'est un logger Php puissant inspiré directement de Python. Voici une configuration correcte pour la production.

monolog:
    handlers:
        main:
            type:                 fingers_crossed
            action_level:       error
            handler:            grouped
            channels:           !bomo_files
        grouped:
            type:               group
            members:            [streamed, swift]
        streamed:
            type:               stream
            path:               "%kernel.logs_dir%/%kernel.environment%.log"
            level:              debug
        swift:
            type:               swift_mailer
            from_email:        FQN@foo.com
            to_email:           webmaster@company.com
            subject:            "OOps"
            level:              debug
        login:
            type:               stream
            path:               "%kernel.logs_dir%/auth.log"
            level:              info
            channels:           security
        file:
            type:               fingers_crossed
            action_level:       warning
            handler:            file_stream
            channels:           bomo_files
        file_stream:
            type:               stream
            path:               "%kernel.logs_dir%/files.log"
            level:              debug

Le cœur de l'application

Cette configuration permet de logger le cœur de l'application qu'en cas d'erreur. ( c.f : main / action_level )

Si une erreur est notifiée avec le niveau "error" alors le handler main réagit. Main utilise un type de logger qui s'appelle fingers_crossed. Ce type permet de garder l'ensemble des logs liées à la request et de choisir le niveau des logs à afficher.

Le type group sous le handler grouped permet juste de grouper différents traitements pour les logs. Ici, les logs sont :

  • écrits sur le HDD grâce au type stream sous le handler streamed.
  • Envoyés par mail grâce au type swift_mailer sous le handler swift

En résumé, si une erreur est notifiée au niveau error du logger, cela déclenche le handler main qui lui même déclanche les handlers streamed et swift. Ces derniers, loguerons au niveau debug.

main:
    type:               fingers_crossed
    action_level:       error
    handler:            grouped
    channels:           !bomo_files
grouped:
    type:               group
    members:            [streamed, swift]
streamed:
    type:               stream
    path:               "%kernel.logs_dir%/%kernel.environment%.log"
    level:              debug
swift:
    type:               swift_mailer
    from_email:        FQN@foo.com
    to_email:           webmaster@company.com
    subject:            "OOps"
    level:              debug

Les authentifications

Avec la configuration vu au dessus, le cœur de l'application n'est loggée que si le niveau error est notifié. Hors nous souhaiterions logger les authentification réussites comme ratées qui elles notifient au niveau info. Pour cela, il suffit d'utiliser les channels. C'est un espace de nommage pour le logger.

Toutes les logs liés à la sécurité sont sous le channel security. Du coup nous l'utilisons pour mettre les authentifcations dans le fichier auth.log

login:
    type:               stream
    path:               "%kernel.logs_dir%/auth.log"
    level:              info
    channels:           security

Les bundles perso

Ici je souhaite logger l'info de la génération de fichier dans un fichier à part. Si le bundle en question utilise un channel spécifique pour ses logs c'est trivial.

file:
    type:               fingers_crossed
    action_level:       warning
    handler:            file_stream
    channels:           bomo_files
file_stream:
    type:               stream
    path:               "%kernel.logs_dir%/files.log"
    level:              debug

Commentaires

Ajouter un commentaire
Merci également
C'est top ! j'ai gagné un temps fou. :)
Merci
Merci pour cette conf bien détaillée et bien expliquée.