Jeder von euch kennt vermutlich das Problem. Ihr arbeitet an einer Website und es gibt Fehler. Manchmal ist es sogar ein kritischer und ihr seht das hier:
Aber in manchen Fällen tritt der Fehler nicht in jedem Request auf. Dann solltet ihr den Debug-Modus aktivieren und alle Fehler protokollieren lassen.
Den Debug-Modus aktivieren
Um den Debug-Modus von WordPress zu aktivieren, müsst ihr lediglich ein paar Konstanten in der wp-config.php
setzen. Das hier sind die Standardwerte:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Hiermit werden dann keine Fehler im Frontend oder Backen angezeigt, sondern sie werden in die Datei wp-content/debug.log
geschrieben. Da diese Datei öffentlich ist, solltet ihr sie schützen. Entweder durch dir Server-Konfiguration (in der ihr z.B. den Zugriff auf alle .log
Dateien blockiert) oder aber, indem ihr der Datei einen zufällig Namen gebt:
define( 'WP_DEBUG_LOG', '/var/www/html/wp-content/debug-4f63f64.log' );
Nun wird jeder PHP-Fehler in diese Datei geschrieben. Aber leider auch jede PHP-Notice oder Warning. Falls ihr viele davon habt (weil z.B. Plugins/Themes alten Code mit einer neuen PHP-Version verwenden), kann es schwierig sein, die PHP-Fehler in der Log-Datei zu finden.
Setzen des Debug-Levels
Glücklicherweise kann man das Debug-Level in PHP sehr einfach mit der error_reporting Funktion setzen. Diese wird entweder mit einem Zahlenwert (Bitmaske) oder benannte Konstanten verwendet. Wenn ihr nur die verschiedenen Arten von Fehler anzeigen wollt, könnt ihr diesen Aufruf verwenden:
error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR );
Jetzt könntet ihr auf die Idee kommen diese Zeile einfach in die wp-config.php
direkt unter die oben genannten Konstanten zu schreiben. Leider wird das nicht funktionieren. Das liegt daran, dass WordPress immer einen Aufruf error_reporting( E_ALL )
macht, wenn ihr WP_DEBUG
auf true
(oder 1
) setzt. Aber wie setzen wir nun das Debug-Level.
Hierzu müsst ihr das Level setzen, nachdem WordPress seinen Standardwert gesetzt hat. Der beste Platz hierfür (ohne den Core zu verändern, was ihr niemals tun solltet) ist ein Must-Use-Plugin. Diese werden geladen, bevor normale Plugins und das Theme geladen werden. Ihr könnt also etwas eine Datei wp-content/mu-plugins/000-set-debug-level.php
erstellen und diese Zeilen rein kopieren (zusätzlich zu einem kleinen Plugin-Kommentar, damit es im Backend einen Namen hat):
<?php
/**
* Plugin Name: Control debug level
*/
error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR );
Nun werden nur noch Fehler in die Log-Datei geschrieben. Dies sollte euch dabei helfen die Fehler in der Datei zu finden und es verhindert auch, dass die Log-Datei aufgrund der Notices und Warning zu schnell anwächst.
Fazit
Leider gibt es in WordPress keine Konstante, mit der man das Debug-Level direkt setzen kann und wenn es zu früh gesetzt wird, dann überschreibt es WordPress wieder. Aber mit einem kleinen MU-Plugin können wir es dennoch setzen.
Dies ist mein erste Blog-Beitrag für 2021. Wie auch im letzten Jahr nehme ich erneut am #projekt26 Hashtag teil. Letztes Jahr habe ich immer in der ersten Woche den englischen Beitrag geschrieben und dann in der Woche drauf übersetzt. Da ich letzte Woche den englischen Beitrag nicht veröffentlichen könnte habe ich beschlossen dieses Jahr einfach in der gleichen Woche den Beitrag gleich in beiden Sprachen zu veröffentlichen.
Vielen Dank für den Artikel! Das MU-„Plugin“ habe ich mir direkt abgespeichert 😉