Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist ein benutzerdefiniertes PHP-Fehlerprotokoll? Detaillierte Erläuterung des Beispielcodes für das Fehlerprotokoll

Was ist ein benutzerdefiniertes PHP-Fehlerprotokoll? Detaillierte Erläuterung des Beispielcodes für das Fehlerprotokoll

伊谢尔伦
伊谢尔伦Original
2017-07-17 16:58:471741Durchsuche

Wenn das definierte Fehlerprotokoll im Projekt zeitnah verarbeitet werden muss, muss die Ausgabemethode des benutzerdefinierten Fehlerprotokolls geändert werden (Protokolle schreiben, senden). E-Mails, Senden von Textnachrichten)

1. register_shutdown_function(array('phperror','shutdown_function')); // Definieren Sie die Funktion, die ausgeführt werden soll, nachdem das PHP-Programm ausgeführt wurde

Die Funktion kann die Funktion implementieren, die nach der Ausführung des Programms ausgeführt werden soll. Seine Funktion besteht darin, dass Folgeoperationen nach Abschluss der Programmausführung implementiert werden können. Während der Ausführung des Programms kann es zu einer Zeitüberschreitung oder einem erzwungenen Herunterfahren kommen, aber die Standardaufforderung ist in diesem Fall sehr unfreundlich. Wenn Sie die Funktion register_shutdown_function() zum Abfangen von Ausnahmen verwenden, können Sie eine benutzerfreundlichere Methode zur Fehleranzeige bereitstellen Gleichzeitig können Folgevorgänge einiger Funktionen implementiert werden, z. B. die vorübergehende Datenbereinigung nach Abschluss der Ausführung, einschließlich temporärer Dateien usw.

Sie können die Aufrufbedingungen wie folgt verstehen:

1. Wenn die Seite vom Benutzer zum Stoppen gezwungen wird
2. Wenn der Programmcode eine Zeitüberschreitung aufweist
3. Wenn die Ausführung des PHP-Codes abgeschlossen ist, gibt es Ausnahmen, Fehler und Warnungen in der Codeausführung

2. set_error_handler(array('phperror','error_handler')); Legen Sie eine benutzerdefinierte Fehlerbehandlungsfunktion fest

Legen Sie einen benutzerdefinierten Fehlerhandler über die Funktion set_error_handler() fest und lösen Sie dann den Fehler aus (über trigger_error()):

3. set_Exception_handler( array('phperror','appException')); // Benutzerdefinierte Ausnahmebehandlung

Bevor wir Protokolle schreiben, fragen wir uns: Warum müssen wir manchmal benutzerdefinierte Protokolle aufzeichnen? Anstatt die Standardprotokollierungsmethode des Systems zu verwenden?

1. Das Team benötigt ein einheitliches Protokollformat für eine einfache Verwaltung

2. Eine große Anzahl nutzloser Fehlerprotokolle belegt Festplattenspeicher und es müssen nur aussagekräftige Protokolle aufgezeichnet werden.

Dann üben Sie es.

1. Öffnen Sie Ihre php.ini

2. Aktivieren Sie die Protokollierung und ändern Sie

log_errors = Off

3 .ini, beenden und starten Sie den Webserver neu

log_errors = On
4. Fügen Sie den folgenden Code am Anfang Ihres Codes hinzu

5. Versuchen Sie, nach dem Code einen Fehlercode zu schreiben

<?php
//错误处理函数
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名
    $template = &#39;&#39;;
    switch ($errno) {
    case E_USER_ERROR:
        $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;error&#39;);
        exit(1);//系统退出
        break;
    case E_USER_WARNING:
        $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;warning&#39;);
        break;
    case E_USER_NOTICE:
        $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
    $log_file = sprintf($log_file,&#39;notice&#39;);
        break;
    default:
        $template .= "未知错误类型: 错误编号[$errno] $errstr  ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;unknown&#39;);
        break;
    }
    file_put_contents($log_file,$template,FILE_APPEND);
    return true;
}
$error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志
echo 1/0;

Sehen Sie, ob sich unter dem von Ihnen definierten Pfad eine zusätzliche Protokolldatei befindet? :)

Hinweis: Die folgenden Fehlerstufen können nicht von benutzerdefinierten Funktionen behandelt werden: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING und die meisten E_STRICT, die in der Datei generiert werden, in der sich die Funktion set_error_handler() befindet angerufen. .

Aber wenn Sie das Fehlerprotokollierungssystem aktivieren (log_error = on in php.ini) und die Systemprotokolldatei angeben (auch error_log=Pfadname in php.ini) und error_reporting aktiviert ist, gilt das oben Genannte Fehler werden in der Datei aufgezeichnet, die Sie als Systemfehlerprotokoll definieren.

Das obige ist der detaillierte Inhalt vonWas ist ein benutzerdefiniertes PHP-Fehlerprotokoll? Detaillierte Erläuterung des Beispielcodes für das Fehlerprotokoll. 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