Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung der Fehler- und Ausnahmeprotokollierung in PHP

Detaillierte Erläuterung der Verwendung der Fehler- und Ausnahmeprotokollierung in PHP

墨辰丷
墨辰丷Original
2018-06-01 16:03:031498Durchsuche

Dieser Artikel stellt hauptsächlich die Verwendung der Fehler- und Ausnahmeprotokollierung in PHP vor. Er analysiert den Unterschied zwischen Fehlern und Ausnahmen in PHP detaillierter und die entsprechenden Verwendungsfähigkeiten der Protokollierung können darauf zurückgreifen

Die Details sind wie folgt:

Wenn es um das Fehlerprotokoll des Nginx + PHP-Dienstes geht, können wir normalerweise an Nginx-Zugriffsprotokoll, Fehlerprotokoll und PHP-Fehlerprotokoll denken. Obwohl dies eine sehr einfache Frage zu sein scheint, geht es tatsächlich um die Anwendungskonfiguration und den Speicherort der Protokollaufzeichnung. Wenn Sie apt-get verwenden, um es auf einem System wie Ubuntu zu installieren, sind eigene, sinnvollere Konfigurationsdateien verfügbar. Darüber hinaus wirkt sich die Konfiguration in der laufenden Anwendung auch auf die Methode und den Inhalt der Protokollierung aus.

Der Unterschied zwischen Fehlern und Ausnahmen

In Bezug auf Fehler und Ausnahmen können wir ein einfaches Beispiel verwenden, um es zu verstehen:

<?php
try {
 1 / 0;
} catch (Exception $e) {
 echo "catched", PHP_EOL;
}

Beim Ausführen dieses kleinen Beispiels wird direkt der Fehler „PHP-Warnung: Pision durch Null...“ angezeigt. Der Grund ist einfach: Dies ist ein logischer Fehler, keine Ausnahme, daher kann er nicht durch Versuch abgefangen werden. Wenn eine Variable vor der Verwendung nicht definiert wird, wird ebenfalls eine Warnung generiert und nicht erfasst.

Dieses Problem weist jedoch einige Änderungen in PHP7 auf. Im obigen Beispiel habe ich beispielsweise / in % geändert und bei der Ausführung in der PHP7-Umgebung erhalte ich eine andere Eingabeaufforderung:

Schwerwiegender PHP-Fehler: Uncaught pisionByZeroError ...

Laut diesem Tipp, wenn ich die Bedingungen in Catch ändere:

<?php
try {
 1 / 0;
} catch (pisionByZeroError $e) {
 echo "catched", PHP_EOL;
}

Auf diese Weise können Fehler normal erfasst und abgefangen ausgegeben werden.

Wenn Sie im ersten Beispiel Excepiton in ErrorException ändern, kann es normal erfasst werden.

Warum der Rest und die Division in PHP5 gleich sind, die Division aber in PHP7 kein pisionByZeroError-Problem darstellt (meine Testumgebung ist 7.0.4), sollte dies ein FEHLER sein.

Protokollaufzeichnung

PHP selbst verfügt über die folgenden konfigurierbaren Protokolle:

① php-fpm-Fehlerprotokoll (php-fpm. conf, zeichnet den Start auf und Beendigung des PHP-FPM-Prozesses)
② PHP-FPM-Langsamprotokoll (auch in php-fpm.conf konfiguriert, zeichnet langsame Ausführung auf)
③ PHP-Fehlerprotokoll (php.ini zum Aufzeichnen von Anwendungsfehlerprotokollen)

Darüber hinaus verfügt Nginx auch über zwei konfigurierbare Protokolle: Zugriffs- und Fehlerprotokoll. Diese Protokolldateien haben unterschiedliche Funktionen und unterschiedliche aufgezeichnete Inhalte. Es ist jedoch ein Punkt zu beachten: Wenn der Speicherort des Fehlerprotokolls in PHP-FPM konfiguriert ist, der Speicherort des Protokolls jedoch nicht beschreibbar ist (der Speicherort muss während der Konfiguration korrekt sein, da PHP-FPM ihn beim Start überprüft), unter entsprechende Konfigurationsbedingungen Das Fehlerprotokoll wird an CGI zurückgegeben und in das Fehlerprotokoll von Nginx geschrieben.

Wenn wir also auf Probleme stoßen, sind unsere allgemeinen Suchideen:

1. Überprüfen Sie den Statuscode der Anfrage im Nginx-Zugriffsprotokoll.
. Überprüfen Sie den Fehlereintrag im PHP Fehlerprotokoll und Stack-Informationen
3. Überprüfen Sie das PHP-FPM-Protokoll auf abnormale Neustartdatensätze (dies passiert, wenn ein Kern- oder Erweiterungsproblem vorliegt)

Aber in den oben genannten Situationen werden Sie auch feststellen, dass dies der Fall ist Es gibt keine Protokollaufzeichnung der vom oben genannten Programm ausgelösten Ausnahme.

Ausnahmedatensatz

Eine Ausnahme ist streng genommen eine Ausnahme der Anwendungslogik und kein Fehler. Sie kann manuell durch eine vernünftige Programmlogik ausgelöst werden . . In den meisten Fällen müssen jedoch auch Ausnahmen aufgezeichnet werden, z. B. Ausnahmen, die durch die Unfähigkeit, eine Verbindung zur Datenbank herzustellen, oder durch eine unsachgemäße Verwendung des Frameworks ausgelöst werden. Wir müssen Protokolle verwenden, um das Problem zu lokalisieren und rechtzeitig zu beheben.

PHP bietet zwei Funktionen zum Anpassen von Fehler- und Ausnahmebehandlungsmethoden:

① set_error_handler

② set_Exception_handler

Sie können also die Funktion set_Exception_handler verwenden. Die injizierte Methode fängt alle Ausnahmen ab und protokolliert sie.

Monolog ist eine hervorragende Ausnahmeprotokollierungsbibliothek und basiert ebenfalls auf dem PSR-3-Standard. Es wird auch standardmäßig in Laravel und Symfony verwendet, um Ausnahmen aufzuzeichnen. Bei Bedarf können Sie auch darüber nachdenken, es in Ihre eigenen Projekte einzuführen.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpDetaillierte Erläuterung abstrakter Methoden und abstrakter Klasseninstanzen

Detaillierte Erläuterung der Verwendung des Schlüsselworts „final“ in PHP

Verwendung von statischen und konstanten Schlüsselwörtern in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Fehler- und Ausnahmeprotokollierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn