Symfony-Protokolldateien werden für alle Umgebungen gleich formatiert. Das bedeutet, dass dev.log
für Maschinen statt für Menschen optimiert ist. Das Ergebnis ist eine Protokolldatei voller nutzloser Informationen, die Ihre Produktivität beeinträchtigt.
EasyLogHandler ist ein neuer Monolog-Handler, der benutzerfreundliche Protokolldateien erstellt. Es ist optimiert, um die Protokollinformationen klar und prägnant anzuzeigen. Nutzen Sie es in der Entwicklungsumgebung, um ein viel produktiverer Entwickler zu werden.
Merkmale
Installation
Konfiguration und Nutzung
Dies sind einige der besten Funktionen von EasyLogHandler und wie es sich mit den Standard-Symfony-Protokollen vergleicht.
Symfony-Protokolldateien sind ein riesiger Textstrom. Wenn Sie sie öffnen, können Sie nicht leicht erkennen, wann eine Anfrage gestartet oder beendet wurde und welche Protokollnachrichten zusammengehören:
Symfony | EasyLogHandler |
---|---|
EasyLogHandler strukturiert die Protokolldateien auf andere Weise:
Es fügt einen großen Header und einige neue Zeilen hinzu, um die einzelnen Anforderungsprotokolle zu trennen.
Wenn die Anfrage weniger wichtig ist (z. B. Assetic-Anfragen), ist der Header kompakter und zeigt weniger Informationen an;
Protokollnachrichten sind intern unterteilt, damit Sie ihre verschiedenen Teile (Anfrage, Doktrin, Sicherheit usw.) besser verstehen können.
Erstens zeigt EasyLogHandler nicht in jeder Protokollnachricht den Zeitstempel an. In der dev
sollte Ihnen das egal sein, daher wird der Zeitstempel nur einmal für jede Gruppe von Protokollmeldungen angezeigt.
Symfony | EasyLogHandler |
---|---|
Die extra
Informationen, die einige Protokollmeldungen enthalten, um weitere Details zum Protokoll hinzuzufügen, werden nur angezeigt, wenn sie sich vom vorherigen Protokoll unterscheiden. Im Gegensatz dazu zeigt Symfony immer das extra
für alle Protokolle an und erzeugt so viele doppelte Informationen:
Symfony |
---|
EasyLogHandler |
---|
Es wird immer beliebter, Platzhalter in Protokollnachrichten anstelle der tatsächlichen Werte zu verwenden (z. B. Matched route "{route}".
anstelle von Matched route "home".
). Dies ist ideal für Maschinen, da sie ähnliche Nachrichten gruppieren können, die sich nur unterscheiden die Platzhalterwerte.
Für den Menschen ist dieses „Merkmal“ jedoch störend. Aus diesem Grund ersetzt EasyLogHandler automatisch alle in der Protokollnachricht enthaltenen Platzhalter:
Symfony |
---|
EasyLogHandler |
---|
Wichtige Elemente wie veraltete und sicherheitsrelevante Meldungen müssen in den Protokolldateien hervorstechen, damit Sie sie sofort erkennen können. Allerdings sehen in Symfony alle Protokolle genau gleich aus. Wie können Sie wissen, welche davon wichtig sind?
Symfony |
---|
(Alle Nachrichten sehen genau gleich aus) |
EasyLogHandler |
---|
(Abwertungen, Warnungen, Fehler und Sicherheitsmeldungen fallen auf) |
Protokollnachrichten enthalten normalerweise zugehörige Variablen in ihrem context
und extra
Eigenschaften. Die Anzeige des Inhalts dieser Variablen in den Protokolldateien ist immer eine schwierige Balance zwischen Lesbarkeit und Prägnanz.
EasyLogHandler entscheidet je nach Protokollnachricht dynamisch, wie diese Variablen eingebunden werden. Doctrine-Abfrageparameter sind beispielsweise immer inline, Anfrageparameter sind jedoch für unwichtige Anfragen inline und für wichtige Anfragen verschachtelt:
Wenn Protokollmeldungen Fehler-Stack-Traces enthalten, sollten Sie sich diese unbedingt ansehen. Allerdings zeigt Symfony Stack-Traces inline an, sodass sie nicht untersucht werden können. EasyLogHandler zeigt sie als richtige Stack-Traces an:
Symfony |
---|
EasyLogHandler |
---|
Eine der frustrierendsten Erfahrungen bei der Überprüfung von Protokolldateien ist das Vorliegen vieler wiederholter oder ähnlich aufeinanderfolgender Meldungen. Sie liefern nur wenige Informationen und lenken Sie nur ab. EasyLogHandler verarbeitet alle Protokollmeldungen auf einmal und nicht einzeln, sodass es weiß, wenn es ähnliche aufeinanderfolgende Protokolle gibt.
Dies ist beispielsweise eine Symfony-Protokolldatei, die drei aufeinanderfolgende fehlende Übersetzungsmeldungen anzeigt:
Und so werden dieselben Meldungen von EasyLogHandler angezeigt:
Der Unterschied ist noch deutlicher bei „Ereignisbenachrichtigungen“-Nachrichten, die normalerweise Dutzende aufeinanderfolgender Nachrichten generieren:
Symfony |
---|
EasyLogHandler |
---|
Dieses Projekt wird als PHP-Paket statt als Symfony-Bundle verteilt, Sie müssen also nur das Projekt mit Composer anfordern:
$ Composer erfordert --dev easycorp/easy-log-handler
Definieren Sie in Ihrer Anwendung einen neuen Dienst für diesen Protokollhandler:
Neuere Symfony-Version:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
Ältere Symfony-Version:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
Aktualisieren Sie Ihre Monolog-Konfiguration in der dev
, um einen gepufferten Handler zu definieren, der diesen neuen Handler-Dienst umschließt (lesen Sie weiter, um zu verstehen, warum). Sie können diese Konfiguration sicher kopieren und einfügen:
Neuere Symfony-Version:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
Ältere Symfony-Version:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
Die meisten Protokollhandler behandeln jede Protokollnachricht separat. Im Gegensatz dazu erfordert die erweiterte Protokollverarbeitung von EasyLogHandler, dass jede Protokollnachricht die anderen Protokolle kennt (z. B. um ähnliche aufeinanderfolgende Nachrichten zusammenzuführen). Das bedeutet, dass alle mit der Anfrage verbundenen Protokolle erfasst und im Stapel verarbeitet werden müssen.
In der obigen Konfiguration speichert der buffered
Handler alle Protokollnachrichten und übergibt sie dann an den EasyLog-Handler, der alle Nachrichten auf einmal verarbeitet und das Ergebnis in die Protokolldatei schreibt.
Verwenden Sie den buffered
Handler, um die protokollierten/ausgeschlossenen Kanäle und die Ebene der protokollierten Nachrichten zu konfigurieren.