Les fichiers journaux Symfony sont formatés de la même manière pour tous les environnements. Cela signifie que dev.log
est optimisé pour les machines plutôt que pour les humains. Le résultat est un fichier journal rempli d’informations inutiles qui vous rend moins productif.
EasyLogHandler est un nouveau gestionnaire Monolog qui crée des fichiers journaux conviviaux. Il est optimisé pour afficher les informations du journal de manière claire et concise. Utilisez-le dans l'environnement de développement pour devenir un développeur beaucoup plus productif.
Caractéristiques
Installation
Configuration et utilisation
Voici quelques-unes des meilleures fonctionnalités d' EasyLogHandler et comment il se compare aux journaux Symfony par défaut.
Les fichiers journaux Symfony sont un énorme flux de texte. Lorsque vous les ouvrez, vous ne pouvez pas facilement savoir quand une requête a commencé ou terminé et quels messages de journal vont ensemble :
Symfony | EasyLogHandler |
---|---|
EasyLogHandler structure les fichiers journaux de manière différente :
Il ajoute un grand en-tête et quelques nouvelles lignes pour séparer chaque journal de requête ;
Si la requête est moins importante (par exemple requêtes Assetic), l'en-tête est plus compact et affiche moins d'informations ;
Les messages du journal sont répartis en interne afin que vous puissiez mieux comprendre leurs différentes parties (demande, doctrine, sécurité, etc.)
Tout d'abord, EasyLogHandler n'affiche pas l'horodatage dans chaque message de journal. Dans l'environnement dev
, vous ne devriez pas vous en soucier, donc l'horodatage n'est affiché qu'une seule fois pour chaque groupe de messages de journal.
Symfony | EasyLogHandler |
---|---|
Les informations extra
, que certains messages du journal incluent pour ajouter plus de détails sur le journal, sont affichées uniquement lorsqu'elles sont différentes du journal précédent. En revanche, Symfony affiche toujours le extra
pour tous les logs, générant beaucoup d'informations dupliquées :
Symfony |
---|
EasyLogHandler |
---|
Il est de plus en plus courant d'utiliser des espaces réservés dans les messages de journal au lieu des valeurs réelles (par exemple, Matched route "{route}".
au lieu de Matched route "home".
) C'est idéal pour les machines, car elles peuvent regrouper des messages similaires qui ne varient que dans les valeurs d'espace réservé.
Cependant, pour les humains, cette « fonctionnalité » est inquiétante. C'est pourquoi EasyLogHandler remplace automatiquement tout espace réservé inclus dans le message du journal :
Symfony |
---|
EasyLogHandler |
---|
Les éléments importants, tels que les dépréciations et les messages liés à la sécurité, doivent ressortir dans les fichiers journaux pour vous aider à les repérer instantanément. Cependant, dans Symfony, tous les journaux se ressemblent exactement. Comment savoir quels sont les plus importants ?
Symfony |
---|
(tous les messages se ressemblent exactement) |
EasyLogHandler |
---|
(les dépréciations, les avertissements, les erreurs et les messages de sécurité ressortent) |
Les messages de journal contiennent généralement des variables associées dans leur context
et des propriétés extra
. Afficher le contenu de ces variables dans les fichiers journaux est toujours un difficile équilibre entre lisibilité et concision.
EasyLogHandler décide comment intégrer ces variables de manière dynamique en fonction de chaque message de journal. Par exemple, les paramètres de requête Doctrine sont toujours intégrés, mais les paramètres de requête sont intégrés pour les requêtes sans importance et imbriqués pour les requêtes importantes :
Lorsque les messages de journal incluent des traces de pile d'erreurs, vous souhaitez absolument les examiner. Cependant, Symfony affiche les traces de pile en ligne, ce qui les rend impossibles à inspecter. EasyLogHandler les affiche sous forme de traces de pile appropriées :
Symfony |
---|
EasyLogHandler |
---|
L’une des expériences les plus frustrantes lors de l’inspection des fichiers journaux est la présence d’un grand nombre de messages consécutifs répétés ou similaires. Ils fournissent peu d’informations et ne font que vous distraire. EasyLogHandler traite tous les messages de journal en même temps au lieu d'un par un, il est donc conscient lorsqu'il existe des journaux consécutifs similaires.
Par exemple, il s'agit d'un fichier journal Symfony affichant trois messages de traduction manquants consécutifs :
Et voici comment les mêmes messages sont affichés par EasyLogHandler :
La différence est encore plus évidente pour les messages « événement notifié », qui génèrent généralement des dizaines de messages consécutifs :
Symfony |
---|
EasyLogHandler |
---|
Ce projet est distribué sous forme de package PHP au lieu d'un bundle Symfony, il vous suffit donc d'exiger le projet avec Composer :
$ composer require --dev easycorp/easy-log-handler
Définissez un nouveau service dans votre application pour ce gestionnaire de journaux :
Version plus récente de Symfony :
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
Ancienne version de Symfony :
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
Mettez à jour votre configuration Monolog dans l'environnement dev
pour définir un gestionnaire mis en mémoire tampon qui encapsule ce nouveau service de gestionnaire (continuez à lire pour comprendre pourquoi). Vous pouvez copier/coller cette configuration en toute sécurité :
Version plus récente de Symfony :
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
Ancienne version de Symfony :
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
La plupart des gestionnaires de journaux traitent chaque message de journal séparément. En revanche, le traitement avancé des journaux EasyLogHandler nécessite que chaque message de journal connaisse les autres journaux (par exemple pour fusionner des messages consécutifs similaires). Cela signifie que tous les journaux associés à la demande doivent être capturés et traités par lots.
Dans la configuration ci-dessus, le gestionnaire buffered
enregistre tous les messages du journal, puis les transmet au gestionnaire EasyLog, qui traite tous les messages en même temps et écrit le résultat dans le fichier journal.
Utilisez le gestionnaire buffered
pour configurer les canaux consignés/exclus et le niveau des messages consignés.