Maison >développement back-end >tutoriel php >Explication détaillée des exemples de journaux d'erreurs personnalisés PHP

Explication détaillée des exemples de journaux d'erreurs personnalisés PHP

黄舟
黄舟original
2017-02-24 09:14:431437parcourir

journal des erreurs personnalisé php

Dans le projet, le journal des erreurs défini doit être traité en temps opportun, vous devez donc modifier la méthode de sortie du journal des erreurs personnalisé ( écrire des journaux, envoyer des e-mails, envoyer des messages texte)

1. register_shutdown_function(array('phperror','shutdown_function')); //Définir la fonction à exécuter après l'exécution du programme PHP

La fonction peut être implémentée lorsqu'une fonction qui est exécutée une fois l'exécution du programme terminée, et sa fonction est d'implémenter les opérations suivantes une fois l'exécution du programme terminée. Il peut y avoir un délai d'attente d'exécution ou un arrêt forcé lorsque le programme est en cours d'exécution, mais l'invite par défaut dans ce cas est très peu conviviale. Si vous utilisez la fonction register_shutdown_function() pour intercepter les exceptions, vous pouvez fournir une méthode d'affichage des erreurs plus conviviale. Dans le même temps, des opérations de suivi de certaines fonctions peuvent être mises en œuvre, telles que le nettoyage temporaire des données après la fin de l'exécution, y compris les fichiers temporaires, etc.

Vous pouvez comprendre les conditions d'appel comme ceci :

1. Lorsque la page est forcée de s'arrêter par l'utilisateur

2. Lorsque le code du programme expire

3. Lorsque l'exécution du code PHP est terminée, il y a des exceptions, des erreurs et des avertissements dans l'exécution du code

2. set_error_handler(array('phperror','error_handler')) ; // Définir une fonction de gestion des erreurs définie par l'utilisateur

Définir le gestionnaire d'erreurs défini par l'utilisateur via la fonction set_error_handler(), puis déclencher l'erreur (via trigger_error()) :

3. set_exception_handler(array('phperror' ,'appException')); //Gestion personnalisée des exceptions

 Définissez le format de données du lancement d'exception.

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;
  }
  
}


Ce qui précède est l'explication détaillée des exemples de journaux d'erreurs personnalisés php. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois. (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn