PHP-Fehler- und Ausnahmeprotokollierung

藏色散人
Freigeben: 2023-04-07 12:48:02
nach vorne
3071 Leute haben es durchsucht

Wenn es um die Fehlerprotokolle des Nginx + PHP-Dienstes geht, denken wir normalerweise an Nginx-Zugriffsprotokolle, Fehlerprotokolle und PHP-Fehlerprotokolle. 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;
}
Nach dem Login kopieren

Die Ausführung dieses kleinen Beispiels wird Es wird direkt die Fehlermeldung „PHP-Warnung: Division 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:

PHP Fatal error: Uncaught DivisionByZeroError ...
Nach dem Login kopieren

Wenn ich gemäß diesem Tipp die Bedingungen in Catch ändere:

<?php
try {
    1 / 0;
} catch (DivisionByZeroError $e) {
    echo "catched", PHP_EOL;
}
Nach dem Login kopieren

Auf diese Weise kann der Fehler normal erfasst und der Catch 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 kein DivisionByZeroError-Problem in PHP7 ist (meine Testumgebung ist 7.0.4), sollte dies ein FEHLER sein.

Protokollaufzeichnungen

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

● php-fpm-Fehlerprotokoll (php-fpm. conf, zeichnet den Start auf und Beendigungsinformationen des PHP-FPM-Prozesses)

● PHP-FPM-Langsamprotokoll (auch in php-fpm.conf konfiguriert, zeichnet langsame Ausführung auf)

● PHP-Fehlerprotokoll (konfiguriert in PHP .ini, zeichnet Anwendungsfehlerprotokolle auf)

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

2. Überprüfen Sie den PHP-Fehler Fehleraufzeichnungen und Stapelinformationen protokollieren

3. Überprüfen Sie das PHP-FPM-Protokoll auf abnormale Neustartaufzeichnungen (dies tritt auf, wenn Kern- oder Erweiterungsprobleme vorliegen)

Aber in den oben genannten Situationen werden Sie dies auch tun Stellen Sie fest, dass es keinen Protokolleintrag der vom oben genannten Programm ausgelösten Ausnahme gibt.

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 Ausnahmeaufzeichnungsbibliothek und basiert auch auf der Implementierung des PSR-3 -Standards. 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.

Das obige ist der detaillierte Inhalt vonPHP-Fehler- und Ausnahmeprotokollierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!