Bei der PHP -Entwicklung ist die Fehlerprotokollierung ein wichtiges Mittel, um die Programmstabilität und Probleme mit der Fehlerbehebung zu gewährleisten. Obwohl PHP mit Mechanismen wie ERROR_LOG und SET_ERROR_HANDLER ausgestattet ist, möchten wir manchmal in der Lage sein, das Ausgabeformat von Fehlermeldungen anzupassen, insbesondere wenn es um Stapelverfolgungsinformationen geht. Die Methode von GetTRaceAsString () in der Ausnahmeklasse kann uns helfen, dieses Ziel zu erreichen.
GetTRACEAsString () ist eine Methode der Ausnahmeklasse in PHP, mit der String -Darstellungen der Stapelverfolgungsinformationen der Ausnahme zurückgegeben werden. Diese Zeichenfolge enthält die Reihenfolge der Funktionsaufrufe, den Dateinamen und die entsprechende Zeilennummer, die für die Protokollierung sehr geeignet ist.
Die Beispielausgabe lautet wie folgt:
#0 /var/www/html/index.php(10): someFunction()
#1 {main}
Wir können die Fehlermeldung formatieren und in die Protokolldatei schreiben, indem wir die Ausnahme ( versuchen Sie ... Fang ) und das Aufrufen von getTraceAsString () . Hier ist ein vollständiges Beispiel:
<Code> & lt;? Php Funktion Loggerrortofile (Ausnahme $ e) {
$ logfile = dir . '/Error.log';
$ logMessage = "[". Datum ('YMD H: I: S'). "]";
$ logMessage. = "Fehler:". $ e-> getMessage (). Php_eol;
$ logMessage. = "In Datei:". $ e-> getFile (). "online". $ e-> getline (). Php_eol;
$ logMessage. = "Stack Trace:". Php_eol. $ e-> getTraceasString (). Php_eol;
$ logMessage. = str_repeat ("-", 80). Php_eol;
file_put_contents($logFile, $logMessage, FILE_APPEND);
}
Funktionsdivide ($ a, $ b) {
if ($ b === 0) {
Neue Ausnahme werfen ("Der Divisor kann nicht 0 sein");
}
Return $ a / $ b;
}
versuchen {
$ result = divide (10, 0);
} catch (Ausnahme $ e) {
loggerrortofile ($ e);
Echo "Ein Fehler ist aufgetreten, bitte anzeigen Sie die Protokolldatei." . Php_eol;
}
</code>
Manchmal möchten wir Fehlerprotokolle an Remote -Server für Unified Management senden. In diesem Fall können Sie beispielsweise File_Get_Contents oder Curl verwenden, um Protokollinformationen auf die Remote -Schnittstelle zu übertragen, z. B.:
<Code> Funktion SendErortOremote (Ausnahme $ e) {$ log = ['time' = & gt; Datum ('ymd h: i: s'), 'message' = & gt; $ e- & gt; getMessage (), 'file' = & gt; $ e- & gt; get file (), 'line' = & gt; $ e- & gt; getline (), 'trace' = & gt; $ e- & gt; getTraceAsString ()]; $json = json_encode($log);
$ch = curl_init('https://gitbox.net/api/error-report');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
</code>
Protokollrotation : Stellen Sie sicher, dass die Protokolldatei nicht unendlich zunimmt. Sie können das Logrotate -Tool kombinieren oder die Dateigröße in PHP festlegen.
Fehlerebene Unterscheidung : Protokolle verschiedener Schweregradniveaus werden basierend auf Ausnahmetyp oder benutzerdefinierter Ebene aufgezeichnet.
Sicherheit : Vermeiden Sie es, sensible Informationen wie Datenbankkennwörter oder Datenschutzdaten für Benutzer aufzuzeichnen.
Verwenden Sie GetTRACEAsString () , um die Ausnahmebeding -Stapelinformationen schnell in lesbare Zeichenfolgen umzuwandeln, und ein flexibler Fehlerprotokollierungsmechanismus kann in Kombination mit benutzerdefinierten Protokollierungsfunktionen implementiert werden. Dies erleichtert nicht nur das lokale Debuggen, sondern erfüllt auch die Bedürfnisse der Fernüberwachung und Alarme. Die flexible Verwendung des von PHP bereitgestellten Ausnahmebehandlungsmechanismus wird die Stabilität Ihres Projekts begleiten.