Ich arbeite derzeit als PHP-Back-End-Entwickler und Programmierer in einem Unternehmen (unser Team hat kein Front-End, daher werden wir bei unseren Aktivitäten Front-End-Sachen übernehmen). Ich habe zwei Wochen gebraucht, um ein Front-End- und Back-End-Programm aufzubauen (ich erinnere mich, dass ich das damals nicht machen konnte und am Wochenende zwei Tage lang Überstunden machen musste). Es ist jetzt mehr als 4 Monate her, dass ich eine nicht sehr komplizierte Aktivität an einem Nachmittag erledigen kann. Natürlich werde ich dabei viele Dinge berücksichtigen, wie z. B. Skalierbarkeit und Wiederverwendbarkeit, denn wenn Sie mehr tun, werden Sie es tun Sammeln Sie viele Dinge, die kleinen Plug-Ins ähneln, sodass es schneller ist. . . . . . Aber ich fand, dass es sehr schlecht ist, den ganzen Tag in den Anforderungen zu stehen und die Anforderungen zu erfüllen. Auf diese Weise lerne ich keine System- und Framework-Dinge, weil ich in trivialen Anforderungen gefangen bin und keine Zeit habe, einige wichtige Teile davon zu erledigen Das Framework, und wenn Ihre Kollegen und Ihr Chef daran gewöhnt sind, dass Sie diese Dinge tun, werden sie es Ihnen ohne zu zögern jedes Mal vorschieben, wenn sie auf etwas stoßen, das keinen technischen Inhalt hat, aber erledigt werden muss (um egoistisch zu sein, sind alle Programmierer). Wie ich wollen sie alle etwas mit technischem Inhalt beherrschen, damit sie als Programmierer stolz sein können, und mit der Zeit wird man sich daran gewöhnen ... Das ist wirklich miserabel, also werde ich es rausnehmen Nehmen Sie sich etwas Zeit, um die Dinge im Framework zu lernen, und versuchen Sie, kein einfacher Programmierer zu sein.
Einführung
Freunde, die mit dem PHP-Framework vertraut sind, kennen möglicherweise die wichtige Rolle von Protokollen im Projekt. Es kann uns helfen, den Fehlerort zu lokalisieren und das Programm benutzerfreundlicher zu gestalten (bei richtiger Handhabung wird es nicht direkt ausgelöst). a big Der Heap ist ein englisches Wort, das nur Programmierer wirklich verwenden können. Es ist auch beim Debuggen sehr praktisch. Es kann auch einige wichtige Vorgänge usw. aufzeichnen. Kurz gesagt, wenn ein vollständiges Projekt kein Protokollsystem hat Die Entwicklungsstraße wird voller Dornen sein. Es gibt Schlaglöcher und es wird definitiv stolpern.
Einführung
Um das PHP-Protokollierungssystem zu beherrschen, müssen Sie zunächst ein gründliches Verständnis dieser Dinge haben.
1. Mehrere Funktionen von PHP
1 set_Exception_handler(callback $Exception_handler); //Ausnahme Erfassen Sie die Registrierung benutzerdefinierter Handlerfunktionen
1 set_error_handler(callback $error_handler); //Fehler Erfassen Sie die Registrierung benutzerdefinierter Handlerfunktionen
1 register_shutdown_function(callback $callback); //program Ungewöhnliche Registrierung der Beendigungsfehlererfassungs-Handlerfunktion während der Ausführung
Diese drei Funktionen bieten Entwicklern viel Autonomie bei der Fehlerbehandlungskontrolle und sind für die Aufzeichnung von Protokollinformationen im Protokollierungssystem verantwortlich.
Wenn im Programm eine Ausnahme auftritt, löst der PHP-Kernel einen Ausnahmefehler aus und gibt dann die Fehlermeldung an den Benutzer aus. Wenn die Ausnahmebehandlungsfunktion registriert ist, wird die von PHP ausgelöste Ausnahme an sich selbst weitergeleitet Die definierte registrierte Ausnahmeabfangfunktion enthält die von uns durchzuführende Verarbeitung und zeichnet die Fehlerinformationen auf (einschließlich Fehlerdetails und Fehlerort). Nachdem die Funktion die Ausnahme behandelt hat, wird die Ausnahme beendet.
Wenn im Programm ein Fehler auftritt, wandelt die von uns registrierte Fehlerbehandlungsfunktion die Fehlerinformationen in ein Fehlerausnahmeobjekt um und übergibt sie an die Ausnahmebehandlungsfunktion, bei der es sich im ersten Schritt um die Funktion $Exception_handler handelt.
Wenn während der Wiederaufnahme ein Fehler beim Herunterfahren auftritt, wird die von uns registrierte Funktion zur Verarbeitung abnormaler Beendigung ausgeführt. Diese Funktion ruft das Fehlerobjekt des letzten Herunterfahrens über error_get_last() ab und generiert dann einen Fehler wie im vorherigen Teil . Ausnahmeobjekt, übergeben Sie dieses Objekt an unsere registrierte Ausnahmebehandlungsfunktion.
Wie Sie sehen können, wandelt es unabhängig davon, ob es sich um eine Ausnahme oder einen Fehler handelt, seine eigenen Informationen in die von der Ausnahmebehandlungsfunktion erkannten Ausnahmeinformationen um und übergibt sie dann zur Verarbeitung an die Ausnahmebehandlungsfunktion . Die Nicht-Ausnahme-Informationen sind wie Make-up. Der Ausnahme-Handler erkennt diese Nicht-Ausnahme-Informationen nur durch Entfernen der Nicht-Ausnahme-Informationen (um genau zu sein). es sollte ausgelöst werden), wird der Ausnahmebehandler es erkennen.
Fehlerbehandlungsprozess im PHP-Protokollsystem
Diese Funktionen funktionieren normalerweise mit einer Ausnahmebehandlungsbibliothek und einer Fehlerprotokollierungsbibliothek. Die Protokollierungsklassenbibliothek wird in $Exception_handler aufgerufen Platzieren Sie Protokolldateien sinnvoll. Die oben genannten Funktionen werden im Allgemeinen wie folgt am Eingang des Programmframeworks geladen und registriert:
Hier wird die Array-Methode (Klasse, Funktion) verwendet.
<span>1</span> <span>set_exception_handler</span>(<span>array</span>("Myexception","exceptionHandler"<span>));
</span><span>2</span> <span>set_error_handler</span>(<span>array</span>("Myexception","errorHandler"<span>));
</span><span>3</span> <span>register_shutdown_function</span>(<span>array</span>("Myexception","shutdownHandler"));
Nach dem Login kopieren
2. Protokollierungsbezogene Bibliotheken
Die im ersten Teil eingeführten Dinge erfassen nur Ausnahmen, Fehler und Abschaltungen. Dies ist nur der erste Schritt. Als nächstes müssen die erfassten Informationen angemessen verarbeitet werden, z lokales Dateisystem (dieser Vorgang befindet sich im Array („MyException“, „ExceptionHandler“)), in dem die Protokollierungsklassenbibliothek verwendet wird. (Die unten erwähnte Klassenbibliothek basiert auf dem Design des Kohana-Protokollsystems.)
Die Protokollierung im japanischen Stil ist ebenfalls sehr einfach. Sie müssen die Informationen lediglich am Ende der Datei hinzufügen, aber ich glaube, dass dies jeder selbst implementieren kann Es ist notwendig, eine praktische und effiziente Lösung zu entwerfen. Die erweiterte Protokollierungsklassenbibliothek ist nicht so einfach. Sie muss nach langer Übung zusammengefasst und optimiert werden. Die Protokollierungsklassenbibliothek im Kohana-Framework ist relativ ausgereift, sodass wir sie verwenden können es hier als Referenz.
Ich glaube, dass Benutzer, die Kohana verwendet haben, mit der Protokollierung im Kohana-Framework vertraut sein müssen. Wenn Sie nicht vertraut sind, werde ich kurz auf die Anwendung/bootstrap.php eingehen Datei im Kohana-Quellcode. Sie können den folgenden Code in den Zeilen 109-112 sehen:
<span>109</span> <span>/*</span><span>*
</span><span>110</span> <span> * Attach the file write to logging. Multiple writers are supported.
</span><span>111</span> <span>*/</span>
<span>112</span> Kohana::<span>$log</span>->attach(<span>new</span> Log_File(APPPATH.'logs'));
Nach dem Login kopieren
Hiermit wird ein Protokollobjekt zum Protokollobjekt hinzugefügt Es handelt sich um unterschiedliche Klassenbibliotheksinstanzen in Kohana Das Protokollierungsobjekt ist in zwei Teile unterteilt. Es dient zur Verwaltung einer Protokollierungsobjektliste. Es ist eigentlich wie ein Container, der ein oder mehrere Protokollierungsobjekte enthält Im zweiten Teil werden diese Protokollierungsobjekte tatsächlich zum Aufzeichnen von Protokollen verwendet. Außerdem gibt es eine Reihe von Fehlerstufen, die für jedes Objekt aufgezeichnet werden müssen. Sie werden nur aufgezeichnet, wenn die Fehlerstufe erreicht ist, und werden weggelassen, wenn dies nicht der Fall ist. Das Folgende ist meine eigene vereinfachte Protokollierungsmethode nach dem Umbenennen:
<span>1</span> self::<span>$log</span> = <span>Log</span>::<span>instance();
</span><span>2</span> self::<span>$log</span>->attach(<span>new</span> Logwriter("./data/debug"),<span>Log</span>::<span>DEBUG);
</span><span>3</span> self::<span>$log</span>->attach(<span>new</span> Logwriter("./data/notice"),<span>Log</span>::NOTICE);
Nach dem Login kopieren
Zum besseren Verständnis habe ich den „Container“ als „Log“ und die aufgezeichnete Instanz als „Logwriter“ bezeichnet. Sie können sehen, dass ich am Programmeingang leicht zwei verschiedene Protokolltypen hinzugefügt habe. Der erste ist „Alle Fehler mit Fehler aufzeichnen“. Zahlen kleiner als Log::DEBUG (Fehlerstufe höher als er) und gemäß den Regeln im Ordner ./data/debug aufzeichnen. Die zweite Möglichkeit besteht darin, Fehler mit einer Stufe gleich oder höher als Log::NOTICE aufzuzeichnen Natürlich können Sie auch detaillierter angeben, welche Fehler gut sind. Dies ist meiner Meinung nach praktisch und schnell. Wir können Fehlerprotokolle hinzufügen und sie entsprechend unseren Anforderungen aufteilen Schauen Sie sich das Bild unten an. Es wird zum Verständnis beitragen:
Die Beziehung zwischen Protokoll und Protokollschreiber
Auf dem Bild oben sehen Sie, dass es sich bei Log um einen Container handelt, der bestimmte unterschiedliche Logwriter-Objekte enthält. Wenn die Fehlerinformationen in die Datei geschrieben werden sollen, wird ein Logwriter ausgeführt Instanz, um zu sehen, ob Sie den Fehler in der Fehlermeldung aufzeichnen möchten. Wenn die Ebene in der Fehlermeldung nicht im Logwriter enthalten ist, wird sie ignoriert.
Wie funktioniert dieser Teil mit dem ersten Teil? Tatsächlich ist es sehr einfach, eine Ausnahme aufzurufen, um eine Fehlermeldung (einschließlich Fehlerort, Fehlercode, Fehlermeldung usw.) zum Fehlernachrichtenarray im Protokollcontainer hinzuzufügen Schreiben Sie diese Informationen nach dem Ende des Programms in die Datei. Bitte beachten Sie, dass beim Lesen des Kohana-Codes möglicherweise kein offensichtliches direktes Schreiben in das Protokoll erfolgt, da mehrere Fehler gleichzeitig auftreten können Wenn ein Fehler auftritt, zeichnen Sie ihn einfach einmal auf, was zusätzliche E/A und Zeit in Anspruch nimmt, bevor das Programm zurückkehrt. Daher besteht Kohanas Ansatz darin, alle Fehler, Ausnahmen und Protokolle standardmäßig in Log::$errormessage zu speichern. und sprechen Sie über das Protokoll, wenn Sie es instanziieren. Die Funktion dieser Funktion besteht darin, sie auszuführen, nachdem das Programm abnormal beendet wurde oder die Ausführung abgeschlossen ist Der Protokolldatensatz hat keinen großen Einfluss auf die Ausführung dieses PHP.
3. Beispielzusammenfassung
An dieser Stelle sollten Sie einen Überblick über das Protokollsystem haben, und Sie können bereits ein „Protokollsystem“ zur Verwendung schreiben. Dies ist die Github-Adresse, die das enthält Code und sehen Sie sich bei Bedarf Beispiele an.
https://github.com/AizuYan/phplog.git
Das Urheberrecht dieses Artikels liegt beim Autor (luluyrt@163.com) und dem Blogpark. Nach dem Nachdruck des Artikels ist der Autor und der Originaltextlink verboten müssen an einer gut sichtbaren Stelle auf der Artikelseite angegeben werden, andernfalls behalten wir uns eine rechtliche Haftung vor.
Das Obige hat das Protokollierungssystem in das PHP-Framework eingeführt, einschließlich seiner Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.