SoFunction
Updated on 2025-03-10

Detailed explanation of php custom error log instance

php custom error log

The project needs to process the definition error log in time, so you need to modify the output method of the custom error log (write logs, send emails, and send text messages)

1. register_shutdown_function(array('phperror','shutdown_function')); //Define the functions executed after the PHP program is executed

Functions can implement functions executed after the program execution is completed, and their function is to realize subsequent operations that complete the program execution. When the program is running, there may be execution timeout or forced shutdown, but the default prompt in this case is very unfriendly. If you use the register_shutdown_function() function to catch exceptions, it can provide a more friendly way to display errors. At the same time, you can implement subsequent operations of some functions, such as temporary data cleaning after execution, including temporary files, etc.

The call conditions can be understood like this:

1. When the page is forced to be stopped by the user
2. When the program code runs out
3. When the PHP code execution is completed, there are exceptions, errors, and warnings for code execution.

2. set_error_handler(array('phperror','error_handler')); // Set a user-defined error handling function

Set the user-defined error handler via the set_error_handler() function and then trigger the error (via trigger_error()):

3. set_exception_handler(array('phperror','appException')); //Custom exception handling

Defines the data format for exception throws.

class phperror{
  
  //Custom error output method  public static function error_handler($errno, $errstr, $errfile, $errline){
    $errtype = self::parse_errortype($errno);
    $ip = $_SERVER['REMOTE_ADDR'];// Here is a simple way to get the client IP    //Customize the format of error prompt    $msg = date('Y-m-d H:i:s')." [$ip] [$errno] [-] [$errtype] [application] {$errstr} in {$errfile}:{$errline}";
    // Customize the path to the log file    $logPath = 'logs/';
    //Write operation, pay attention to file size and other controls    file_put_contents($logPath, $msg, FILE_APPEND);
  }

  //Error output method during system operation  public static function shutdown_function(){
    $lasterror = error_get_last();//shutdown can only catch the last error, trace cannot be obtained    $errtype = self::parse_errortype($lasterror['type']);
    $ip = $_SERVER['REMOTE_ADDR'];// Here is a simple way to get the client IP    //Customize the format of error prompt    $msg = date('Y-m-d H:i:s')." [$ip] [{$lasterror['type']}] [-] [$errtype] [application] {$lasterror['message']} in {$file}:{$lasterror['line']}";
    // Customize the path to the log file    $logPath = 'logs/';
    //Write operation, pay attention to file size and other controls    file_put_contents($logPath, $msg,FILE_APPEND);
  }

 //Custom exception output
  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;
  }
  
}

Thank you for reading, I hope it can help you. Thank you for your support for this site!