Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Beispiele für benutzerdefinierte PHP-Fehlerprotokolle

Detaillierte Erläuterung der Beispiele für benutzerdefinierte PHP-Fehlerprotokolle

黄舟
黄舟Original
2017-02-24 09:14:431345Durchsuche

Benutzerdefiniertes PHP-Fehlerprotokoll

Im Projekt muss das definierte Fehlerprotokoll rechtzeitig verarbeitet werden, daher müssen Sie die Ausgabemethode des benutzerdefinierten Fehlerprotokolls ändern ( Protokolle schreiben, E-Mails senden, Textnachrichten senden)

1. register_shutdown_function(array('phperror','shutdown_function')); //Definieren Sie die Funktion, die nach der Ausführung des PHP-Programms ausgeführt werden soll

Die Funktion kann implementiert werden, wenn eine Funktion ausgeführt wird, nachdem die Programmausführung abgeschlossen ist, und ihre Funktion darin besteht, nachfolgende Vorgänge nach Abschluss der Programmausführung zu implementieren. 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 für einige 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 erfährt

3. Wenn die PHP-Codeausführung 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 den 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

 Definieren Sie das Datenformat für das Auslösen von Ausnahmen.

class phperror{
  
  //自定义错误输出方法
  public static function error_handler($errno, $errstr, $errfile, $errline){
    $errtype = self::parse_errortype($errno);
    $ip = $_SERVER['REMOTE_ADDR'];//这里简单的获取客户端IP
    //错误提示格式自定义
    $msg = date('Y-m-d H:i:s')." [$ip] [$errno] [-] [$errtype] [application] {$errstr} in {$errfile}:{$errline}";
    //自定义日志文件的路径
    $logPath = 'logs/app.log';
    //写操作,注意文件大小等控制
    file_put_contents($logPath, $msg, FILE_APPEND);
  }

  //系统运行中的错误输出方法
  public static function shutdown_function(){
    $lasterror = error_get_last();//shutdown只能抓到最后的错误,trace无法获取
    $errtype = self::parse_errortype($lasterror['type']);
    $ip = $_SERVER['REMOTE_ADDR'];//这里简单的获取客户端IP
    //错误提示格式自定义
    $msg = date('Y-m-d H:i:s')." [$ip] [{$lasterror['type']}] [-] [$errtype] [application] {$lasterror['message']} in {$file}:{$lasterror['line']}";
    //自定义日志文件的路径
    $logPath = 'logs/app.log';
    //写操作,注意文件大小等控制
    file_put_contents($logPath, $msg,FILE_APPEND);
  }

 //自定义异常输出

  public static function appException($exception) { 
   echo " exception: " , $exception->getMessage(), "/n"; 
  } 
  private static function parse_errortype($type){
    switch($type){
      case E_ERROR: // 1 
        return 'Fatal Error';
      case E_WARNING: // 2 
        return 'Warning';
      case E_PARSE: // 4 
        return 'Parse error';
      case E_NOTICE: // 8 
        return 'Notice';
      case E_CORE_ERROR: // 16 
        return 'Core error';
      case E_CORE_WARNING: // 32 
        return 'Core warning';
      case E_COMPILE_ERROR: // 64 
        return 'Compile error';
      case E_COMPILE_WARNING: // 128 
        return 'Compile warning';
      case E_USER_ERROR: // 256 
        return 'User error';
      case E_USER_WARNING: // 512 
        return 'User warning';
      case E_USER_NOTICE: // 1024 
        return 'User notice';
      case E_STRICT: // 2048 //
        return 'Strict Notice';
      case E_RECOVERABLE_ERROR: // 4096 
        return 'Recoverable Error';
      case E_DEPRECATED: // 8192 
        return 'Deprecated';
      case E_USER_DEPRECATED: // 16384 
        return 'User deprecated';
    }
    return $type;
  }
  
}


Das Obige ist die detaillierte Erklärung der Beispiele für benutzerdefinierte PHP-Fehlerprotokolle. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

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