Hoy vamos a aprender cómo podemos hacer un handler para redirigir los errores PHP a la consola de Linux o Docker.
Lo primero que tenemos que hacer es crear un manejador, podemos llamarlo exception_handler.php
Y vamos a añadir lo siguiente:
<?php function manejarExcepcion($excepcion) { // Obtener información sobre la excepción $mensaje = 'ERR: Se ha producido un error en el sitio web.' . "\n\n"; $mensaje .= 'ERR: Mensaje de error: ' . $excepcion->getMessage() . "\n"; $mensaje .= 'ERR: Archivo: ' . $excepcion->getFile() . "\n"; $mensaje .= 'ERR: Línea: ' . $excepcion->getLine() . "\n"; $mensaje .= 'ERR: Código de estado HTTP: ' . http_response_code() . "\n"; $fechaActual = date('Y-m-d H:i:s'); $cadenaError = $fechaActual . " IP: [" . $_SERVER['REMOTE_ADDR'] . "] " . $mensaje; file_put_contents('php://stdout', $cadenaError . "\n"); } // Establecer la función de manejo de excepciones personalizada set_exception_handler('manejarExcepcion');
Esta función nos dará toda la información necesaria para identificar el error, el mensaje de error, el archivo, la línea y el código de error. Además de la fecha y la IP desde dónde nos han llamado.
OJO: debéis poner $_SERVER[‘HTTP_X_REAL_IP’] si usais un proxy inverso, en vez de $_SERVER[‘REMOTE_ADDR’];
Ahora solo tenemos que incluir este fichero en los ficheros que queramos auditar errores realizando un include:
include_once('../extras/exception_handler.php');
Extra: Logs por consola.
Si queremos sacar logs por consola sin que sean excepciones podemos utilizar:
<?php function logConsola($mensaje) { // Registrar el mensaje en la consola error_log($mensaje); } // Ejemplo de uso logConsola("Este es un mensaje informativo."); logConsola("Este es un mensaje de advertencia."); logConsola("Este es un mensaje de depuración.");
Podemos redirigir todos los errores que se produzcan en los ficheros php, incluyendo esto en nuestro .htaccess:
<IfModule mod_php.c> php_value auto_prepend_file "exception_handler.php" </IfModule>
Y podemos completar nuestro script para que sea más completo de esta forma:
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.