Mit Sublime Text und einem regulären Ausdruck den Errorlog aufbereiten

Weißer Bildschirm, kryptische Fehlermeldungen und dann Debugging, also Fehlersuche. Das ist eine typische Tätigkeit für mich, wenn ich für Kunden arbeite. Dabei ist ein häufiger Schritt, dass ich mir den Errorlog durchschaue. Wie ich dabei vorgehe, um die einzelnen Fehler zu isolieren, möchte ich mal in diesem Kurztipp aufzeigen.

In Produktivumgebungen möchte ich nicht, dass die Fehlermeldungen gezeigt werden, also verwende ich normalerweise folgenden Code in der wp-config.php, um das debug.log zu aktivieren:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

Ein define( 'WP_DEBUG', true ); wird überschrieben oder auskommentiert.

Je nach Hoster kann es auch andere Wege zu dieser Datei, also einem Errorlog, geben. Im besten Fall habt ihr am Ende eine Datei vorliegen, die in etwa solche Einträge enthält:

[13-Apr-2023 11:37:53 UTC] PHP Notice:  Undefined property: stdClass::$current in /www/htdocs/example.de/wp/wp-includes/class-walker-nav-menu.php on line 181

Das Problem ist nun, dass diese Zeile immer dann geschrieben wird, wenn der Fehler durch einen Besucher ausgelöst wird und PHP via error_log() in die debug.log-Datei schreibt.

Es bleibt also nicht bei einer Zeile und sieht dann eher so aus:

Nun kann ich in meinen Editor Sublime Text praktischerweise reguläre Ausdrücke (regular expressions oder kurz RegEx) nutzen. Damit filtere ich mir den Datum/Zeit-Stempel weg. Ich rufe also Find -> Replace… auf und trage meine RegEx bei „Find:“ ein:

Wichtig ist hier zu kontrollieren, ob die regulären Ausdrücke auch aktiviert sind, dann ist das Sternchen („*“) vorne hervorgehoben. Hier nochmal die RegEx zum Kopieren (Erklärung folgt weiter unten):

\[\d{1,2}-[A-Z][a-z]{2}-\d{4} \d{1,2}:\d{2}:\d{2} UTC\] 

Achtung: Da ist ein Leerzeichen am Ende. Nicht vergessen, beim Kopieren!

Der zweite Wert bei „Replace:“ bleibt leer. Der Datum/Zeitstempel sollte jetzt auch mit einer Outline versehen sein. Falls das Datumsformat von meinem Beispiel abweichen sollte, dann müsst ihr hier anpassen, bis die Outline den gesamten vorderen Bereich in den eckigen Klammern erwischt.

Jetzt rechts unten auf Replace All klicken und wir ersetzen diesen Bereich durch nichts, also wird er einfach entfernt.

Warum habe ich das gemacht? Nun, vorher war jede Zeile einzigartig durch den Zeitstempel, aber jetzt habe ich in jeder Zeile eine Fehlermeldung oder Warnung, die ich mit einer praktischen Funktion des Editors konsolidieren kann.

Durch das Aufrufen von Edit -> Permute Lines -> Unique werden nämlich alle Duplikate entfernt.

Das vormals völlig unübersichtliche Konglomerat an Warnungen und Fehlermeldungen wird nun eingedampft auf die einzelnen Posten und siehe da, es bleiben nur drei übrig:

In so einer bereinigten Version lässt sich doch schon viel schneller der relevante Fehler finden.

Wie bereitet ihr die debug.log-Datei auf? Nutzt ihr dafür auch einen Editor? Oder benutzt ihr dafür ein spezielles Tool? Oder etwas vom Betriebssystem? Freue mich auf eure Hinweise in den Kommentaren.

Nun noch die Erklärung für die RegEx:

\[\d{1,2}-[A-Z][a-z]{2}-\d{4} \d{1,2}:\d{2}:\d{2} UTC\] 

Der Backslash vor einem Zeichen verhindert, dass es als Steuerzeichen interpretiert wird und (in diesem Fall) nur das Zeichen „[“ gesucht wird.

d steht für Digit, also Zahl von 1-9 und der Fortsatz {1,2} meint, es kann 1 oder zweimal vorkommen (kann auch unnötig sein, wenn das Datum führende Nullen nutzt).

Das „-“ meint den Bindestrich.

[A-Z] steht für irgendeinen Großbuchstaben, gefolgt von 2 (wegen des {2}) Kleinbuchstaben. Damit haben wir die Monatsangabe.

Als Nächstes kommen vier Zahlen, also das Jahr.

Gefolgt von einem Leerzeichen.

Dann 1 oder 2 Zahlen (Stunde), Doppelpunkt, 2 Zahlen (Minuten), Doppelpunkt und wieder 2 Zahlen (Sekunden).

Gefolgt von Leerzeichen und den Buchstaben „UTC“.

Abschluss ist dann wieder ein Zeichen, dass ein Steuerzeichen sein könnte, was also mit einem Backslash escaped werden muss. „]“.

Und ganz am Ende wieder ein Leerzeichen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert