Das Debug-Level mit error_reporting setzen

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.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

1 Kommentar » Schreibe einen Kommentar

Schreibe einen Kommentar

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