So generieren Sie einen Stack-Trace bei Fehlern


20

Ich bin ein Systemadministrator, der versucht, eine Drupal-Site zu debuggen. In meinen Server-Logs kann ich sehen, dass Drupal immer wieder dieselben Anfragen an unsere Solr-Instanz stellt, bis PHP irgendwann keinen Speicher mehr hat und Apache einen 500-Fehler zurückgibt.

Wie kann ich Drupal so konfigurieren, dass irgendwo auf der Festplatte ein Stack-Trace protokolliert wird?

Antworten:


15

Sie können das Entwicklungsmodul verwenden und eine der "Krumo Backtrace" -Optionen auf der Konfigurationsseite unter admin / config / development / devel auswählen.

Krumo Backtrace

Stellen Sie sicher, dass Sie admin / config / development / logging besuchen und "Errors and Warnings" oder "All Messages" auswählen. Wenn Sie das Syslog-Modul oder ein anderes Protokollierungsmodul aktiviert haben, müssen Sie es möglicherweise deaktivieren und das Dblog-Modul aktivieren.

backtrace config


6
Ich finde, dass diese Methode den Krumo-Backtrace für bestimmte Ausnahmen nicht liefert, z. B. für den Zugriff auf eine nicht vorhandene Eigenschaft eines EntityMetadataWrapperObjekts.
— Artfulrobot

3
Bei EntityMetadataWrapper-Fehlern gehen Sie in die Zeile des gemeldeten Fehlers und fügen Sie sie ddebug_backtrace();direkt vor dieser Zeile ein. Vergessen Sie nicht, das natürlich zu entfernen!
— Duncanmoo

Werden diese Nachrichten irgendwo protokolliert oder ist es möglich, sie in ein Protokoll aufzunehmen? Ansonsten ist es für die Produktion nutzlos.
— Hjulle

1

In Ihrem Drupal-System finden Sie im Abschnitt Module unter Kernmodule das Syslog-Modul zum Speichern des Protokolls auf der Festplatte. hoffe es hilft was ihr sucht.


1
Dies funktioniert leider nicht bei schwerwiegenden Fehlern (z. B. Speichermangel).
— Stefgosselin

0

Für Drupal 7 und 8 das Modul eignet sich inspect hervorragend für Backtraces.

Es kann sie zu Dateien oder zum Protokoll in der Drupal-Datenbank hinzufügen, anstatt sie anzuzeigen. Dies ist in Fällen hilfreich, in denen Krumo ddebug_backtrace() und andere Lösungen, die eine direkte Bildschirmausgabe erstellen, fehlschlagen. Dies ist der Fall bei Fehlern und Ausnahmen, die auftreten, bevor die Ausgabe gestartet wird.

Der Konfigurationsbereich des Admin-Backends für inspect enthält eine schöne Kurzreferenz für die Verwendung im Code.


2
Ich habe mich in den inspectDokumenten umgesehen, aber ich habe keine Möglichkeit gefunden, damit bei einem Fehler einen Stack-Trace zu generieren. Ist das etwas, was es tun kann?
— Ken Williams

0

Die Spur Modul hat in meiner Situation viel besser funktioniert.

Dies ist ein Sysadmin- und Entwicklertool, das umfangreiche Nachverfolgungsfunktionen für Drupal-Hook-Aufrufe, Datenbankabfragen und PHP-Fehler hinzufügt.

Einige Funktionen, die von Version 1.0 dieses Moduls bereitgestellt werden:

  • Gibt Trace-Meldungen in eine Datei oder in das Syslog aus (auf Unix-Plattformen).
  • Verfolgt Drupal-Hook-Aufrufe mit einem optionalen Filter und Stack-Trace.
  • Verfolgt PHP-Warnungen und -Fehler mit einem optionalen vollständigen Stack-Trace.
  • Verfolgt SQL-Datenbankabfragen mit optionaler Filterung nach Abfragetyp.
  • Die Trace-Ausgabe enthält Timing-Informationen auf Mikrosekunden-Ebene.
  • Stack-Traces enthalten die übergebenen Argumente der Funktion in der PHP-Syntax.
  • Die optionale Debug-Ausgabe enthält PHP-Superglobale und HTTP-Header.
  • Definiert einen Hook, mit dem andere Module die Trace-Ausgabeziele erweitern können.

1
Dieses Modul befindet sich
— derzeit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.