Registro de errores y prácticas recomendadas
Registre los errores en archivos y siga patrones de gestión de errores para producción.
Registro de errores y prácticas recomendadas es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
Por qué es importante registrar errores
En producción, no puede mostrar errores a los usuarios, pero necesita saber cuándo algo falla. El registro captura los detalles de los errores en archivos o servicios para que pueda investigarlos más adelante.
error_log()
La función de registro más sencilla: escribe un mensaje en el registro de errores de PHP:
<?php
error_log('User login failed for: ' . $email);
error_log('DB query took: ' . $duration . 'ms');
// Send to email (not recommended for high traffic)
error_log('Critical: server out of memory', 1, 'admin@example.com');Registro estructurado
Registre los datos estructurados como JSON para facilitar su análisis y consulta:
<?php
function logEvent(string $level, string $message, array $context = []): void {
$entry = array_merge([
'ts' => date('c'),
'level' => $level,
'message' => $message,
], $context);
error_log(json_encode($entry));
}
logEvent('ERROR', 'Payment failed', [
'order_id' => 123,
'amount' => 99.99,
'user_id' => 45,
]);Niveles de registro (PSR-3)
PSR-3 define niveles de registro estándar:
- emergency — el sistema no se puede utilizar
- alert — es necesario tomar medidas
- critical — condiciones críticas
- error — errores en tiempo de ejecución
- warning — sucesos excepcionales que no son errores
- notice — eventos normales pero importantes
- info — mensajes informativos
- debug — información detallada de depuración
Registrador Monolog
Monolog es la biblioteca de registro estándar de PHP y es compatible con PSR-3:
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('app');
$log->pushHandler(new StreamHandler('/var/log/app.log', Logger::DEBUG));
$log->info('User logged in', ['user_id' => 42]);
$log->error('Payment failed', ['order' => 99, 'reason' => 'card_declined']);
$log->warning('Slow query', ['duration_ms' => 3200]);Gestión de excepciones en producción
Un controlador de excepciones preparado para producción que registra el error y devuelve una respuesta segura:
<?php
set_exception_handler(function(\Throwable $e) {
$id = uniqid('err_');
error_log(json_encode([
'error_id' => $id,
'class' => get_class($e),
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => $e->getTraceAsString(),
]));
http_response_code(500);
echo json_encode(['error' => 'Server error', 'id' => $id]);
exit(1);
});Rotación de registros
Los archivos de registro crecen indefinidamente; rótelos con logrotate en Linux o con controladores basados en el tiempo de Monolog:
<?php
use Monolog\Handler\RotatingFileHandler;
$handler = new RotatingFileHandler(
'/var/log/app.log',
30, // keep 30 days
Logger::DEBUG
);
// Creates dated files: app-2024-05-27.log
$log = new Logger('app');
$log->pushHandler($handler);Registro con contexto detallado
Incluya el contexto de la solicitud en cada entrada del registro para facilitar la depuración:
<?php
function getRequestContext(): array {
return [
'url' => $_SERVER['REQUEST_URI'] ?? '',
'method' => $_SERVER['REQUEST_METHOD'] ?? '',
'ip' => $_SERVER['REMOTE_ADDR'] ?? '',
'user_id' => $_SESSION['user_id'] ?? null,
];
}
// Add to every log call:
$log->error('Order failed', array_merge(
getRequestContext(),
['order_id' => $orderId]
));Evitar datos confidenciales en los registros
Nunca registre información confidencial:
- Contraseñas y tokens
- Números de tarjetas de crédito
- Datos personales (cumplimiento del RGPD)
- Trazas completas de la pila de excepciones en las respuestas dirigidas a los usuarios
<?php
// Bad:
error_log('Login attempt: ' . $email . ' / ' . $password);
// Good:
error_log('Login failed for user: ' . substr($email, 0, 3) . '***');Sentry y seguimiento externo de errores
En producción, utilice servicios de seguimiento de errores como Sentry para centralizar los errores y recibir alertas:
<?php
// After composer require sentry/sdk
\Sentry\init(['dsn' => getenv('SENTRY_DSN')]);
// Automatic capture of unhandled exceptions
// Manual capture:
try {
processOrder();
} catch (\Throwable $e) {
\Sentry\captureException($e);
throw $e;
}Precondiciones basadas en aserciones
Utilice aserciones para detectar errores de programación durante el desarrollo:
<?php
// assert() throws AssertionError when false (dev mode)
assert(is_int($userId), 'userId must be an integer');
assert($amount > 0, 'amount must be positive');
// Or throw explicitly:
if (!is_int($userId)) {
throw new \InvalidArgumentException('userId must be int');
}Comprobación rápida
Según PSR-3, ¿qué nivel de registro indica una situación que requiere atención inmediata?
Repaso: registro de errores
Prácticas recomendadas para el registro:
- Utilice registros JSON estructurados con marca de tiempo, nivel, mensaje y contexto
- Siga los niveles de registro de PSR-3
- Utilice Monolog en las aplicaciones de producción
- Rote los registros para evitar llenar el disco
- Nunca registre contraseñas ni datos confidenciales
- Utilice Sentry o una herramienta similar para el seguimiento de errores en tiempo real
Preguntas frecuentes
¿La lección «Registro de errores y prácticas recomendadas» es gratis?
Sí — el texto completo de «Registro de errores y prácticas recomendadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Registro de errores y prácticas recomendadas»?
Registre los errores en archivos y siga patrones de gestión de errores para producción. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Registro de errores y prácticas recomendadas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipos de errores y generación de informes en PHP
- Try, Catch y Finally
- Creación de excepciones personalizadas
- Registro de errores y prácticas recomendadas