In der täglichen PHP -Entwicklung begegnen wir häufig Ausnahmen im Programm. Um das Problem schnell zu finden, bietet PHP eine sehr praktische Methode der Ausnahmeklasse : getTraceasString () . Es formatiert die Stapelverfolgungsinformationen in die String -Ausgabe und hilft den Entwicklern, schnell zu verstehen, wo der Fehler auftritt, und die Anrufkette.
Wenn eine Ausnahme erfasst wird, können wir GetTRaceasString () direkt verwenden, um Stapelinformationen zu erhalten:
<Code> try {// Ausnahme simulieren, wirf eine neue Ausnahme ("Testfehler"); } catch (Ausnahme $ e) {echo $ e-> getTraceAsString (); } </code>Die Ausgabe ähnelt wie folgt:
#0 /var/www/html/test.php(3): throw new Exception('Testfehler')
#1 {main}
Obwohl dies bereits grundlegende Informationen liefert, möchten wir in praktischen Anwendungen häufig mehr Kontext sehen und sogar benutzerdefinierte Felder hinzufügen, z.
Um einen detaillierteren Fehlerbericht zu generieren, können wir selbst eine Fehlerbehandlungsfunktion selbst zusammenschließen und die Informationen von GetTRaceAsString () in andere diagnostische Informationen integrieren. Zum Beispiel:
<Code> Funktion LOGExceptionDetailed (Ausnahme $ e) {$ log = []; $ log [] = "Zeit:". Datum ('ymd H: i: s'); $ log [] = "Fehlermeldung:". $ e-> getMessage (); $ log [] = "Datei:". $ e-> getFile (). "" ". $ e-> getline ()." zeile "; JSON_Unescaped_unicode); file_put_contents(__DIR__ . '/error.log', implode("\n", $log) . "\n\n", FILE_APPEND);
}
</code>
Verwendung im Programm:
<Code> try {// Angenommen, someriskyfunction (), dass hier ein Fehler ausgeführt wird; } catch (Ausnahme $ e) {loGexceptionDetailed ($ e); Echo "Der Systemfehler ist aufgetreten, bitte versuchen Sie es später erneut."; } </code>Auf diese Weise erfassen wir den Fehlerkontext und rufen Stack intakt auf, was auch in Produktionsumgebungen Probleme besser reproduzieren und analysieren kann.
In kritischen Systemen ist es nach einem Fehler möglicherweise nicht nur erforderlich, das Protokoll aufzuzeichnen, sondern auch Entwickler in Echtzeit zu benachrichtigen. Sie können die oben genannte loGexceptionDetailed -Funktion erweitern, E -Mails senden oder Remote -Schnittstellen aufrufen (z. B. Enterprise Wechat, Dingtalk oder Ihr eigenes Benachrichtigungssystem):
<Code> Funktion notifyDevteam ($ message) {$ url = "https://api.m66.net/notify"; // Beispielschnittstelle $ data = ['msg' => $ message]; $opts = [
"http" => [
"method" => "POST",
"header" => "Content-Type: application/json",
"content" => json_encode($data)
]
];
file_get_contents($url, false, stream_context_create($opts));
}
</code>
Fügen Sie nach der Protokollierung hinzu:
<Code> notifyDevteam (implode ("\ n", $ log)); </code>Mit GetTRACEAsString () können wir die Anrufstapelinformationen der Ausnahme erhalten, was für das Debuggen sehr hilfreich ist. Kombinieren Sie Kontextinformationen, benutzerdefinierte Formate, Protokollierungs- und Benachrichtigungsmechanismen und kann ein vollständiges Fehlerberichtssystem erstellt werden. Dies erlaubt uns nicht nur, das Problem so schnell wie möglich zu wissen, wenn etwas schief geht, sondern verbessert auch die Inspektionseffizienz erheblich. Es ist eine Funktion, die in jedem PHP -Projekt hinzugefügt werden sollte.