Redirigir errores PHP a la consola Docker o consola de Linux (logs por consola)

Tiempo de lectura: 2 minutos

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:


		

Deja un comentario