Mostrar errores por consola y consola Docker con Codeigniter y PHP

Tiempo de lectura: 2 minutos
Luna - Pexels

Para integrar este código en CodeIgniter y asegurarte de que todos los errores se registren en la consola, puedes seguir estos pasos:

  1. Crear un archivo de helper o library en CodeIgniter:
    Puedes colocar tu código en un archivo helper o library. En este ejemplo, crearé un helper.
  2. Registrar el helper en tu controlador base o en un hook:
    Esto asegurará que el helper se cargue en todas las solicitudes.

Paso 1: Crear el Helper

Crea un archivo llamado error_logging_helper.php en la carpeta application/helpers. Añadiremos este código que tiene un interceptor de errores:

<?php

// Función para manejar excepciones
function manejarExcepcion($excepcion)
{
    $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";

    $mensaje .= "\nLlamada a: " . $_SERVER['REQUEST_URI'];
    $body = file_get_contents('php://input');
    if ($body != "") {
        $mensaje .= "\nBody: " . json_encode($body);
    }

    $headers = getallheaders();
    foreach ($headers as $header => $value) {
        if (in_array(strtolower($header), ['x-auth-token', 'authorization'])) {
            $value = str_replace('Bearer ', '', $value);
            $mensaje .= "\nToken: " . $value;
        }
    }

    logConsola($mensaje, "\033[91m"); // Rojo brillante
}

// Establecer la función de manejo de excepciones personalizada
set_exception_handler('manejarExcepcion');

set_error_handler(function ($severity, $message, $file, $line) {
    $mensaje = 'ERR: Se ha producido un error en el sitio web.' . "\n\n";
    $mensaje .= 'ERR: Mensaje de error: ' . $message . "\n";
    $mensaje .= 'ERR: Archivo: ' . $file . "\n";
    $mensaje .= 'ERR: Línea: ' . $line . "\n";
    $mensaje .= 'ERR: Código de estado HTTP: ' . http_response_code() . "\n";

    $mensaje .= "\nLlamada a: " . $_SERVER['REQUEST_URI'];
    $body = file_get_contents('php://input');
    if ($body != "") {
        $mensaje .= "\nBody: " . json_encode($body);
    }

    $headers = getallheaders();
    foreach ($headers as $header => $value) {
        if (in_array(strtolower($header), ['x-auth-token', 'authorization'])) {
            $value = str_replace('Bearer ', '', $value);
            $mensaje .= "\nToken: " . $value;
        }
    }

    logConsola($mensaje, "\033[91m"); // Rojo brillante
});

function logConsola($mensaje, $color = "\033[32m") // Verde brillante por defecto
{
    $fechaActual = date('Y-m-d H:i:s');
    $cadenaError = $fechaActual . " IP: [" . $_SERVER['HTTP_X_REAL_IP'] . "] " . $mensaje;

    $sinColor = "\033[0m";
    $cadenaError = $color . $cadenaError . $sinColor;

    file_put_contents('php://stdout', $cadenaError . "\n");
}

Paso 2: Cargar el Helper en CodeIgniter

Para cargar tu helper en todas las solicitudes, edita el archivo application/config/autoload.php y añade tu helper al array autoload:

$autoload['helper'] = array('url', 'error_logging');

Paso 3: Verificar que el log funcione

Para verificar que los errores se están registrando en la consola, puedes provocar un error deliberado en tu aplicación y comprobar los logs de la consola.

Con estos pasos, tu aplicación CodeIgniter debería registrar todos los errores en la consola, con información detallada sobre el error y la solicitud que lo provocó.

Deja un comentario