¿Qué es Context?
La funcionalidad Context de Laravel es un mecanismo para registrar y compartir información a través de solicitudes, jobs de cola y ejecuciones de comandos. Al añadir información mediante la fachadaIlluminate\Support\Facades\Context, esa información se agrega automáticamente a todas las entradas de log que la aplicación escribe.
Así puedes distinguir claramente la información pasada en cada llamada de log de la información compartida que mantiene Context.
Es especialmente útil para hacer tracing en sistemas distribuidos o arquitecturas con colas.
Flujo de propagación del contexto
Uso básico
El caso más habitual es fijar untrace_id en un middleware. Se incluirá automáticamente en todas las entradas de log posteriores.
1
Crear el middleware
2
Añadir el trace ID al Context
3
Registrar el middleware
Regístralo como middleware global en
bootstrap/app.php.url y trace_id.
Escritura en el contexto
add — añadir valores
add sobrescribe las claves existentes. Para añadir solo si la clave no existe, usa addIf.
increment / decrement — contadores
Métodos específicos para aumentar o disminuir un valor numérico. El segundo argumento indica el paso.when — añadir condicionalmente
Conwhen puedes añadir datos distintos cuando la condición es true o false.
push — apilar en una lista
Context soporta “pilas” de datos en formato lista. Conpush los datos se apilan en el orden en que se añaden.
Obtención del contexto
get / all
only / except — subconjuntos
pull / pop — obtener y eliminar
pull obtiene el valor y lo elimina del contexto a la vez.
pop.
remember — establecer si no existe y devolver
has / missing — comprobar existencia
has devuelve true aunque el valor sea null. Solo comprueba si la clave está registrada.Eliminación del contexto
Elimina una clave conforget.
Contexto con scope
Conscope, puedes modificar el contexto solo durante la ejecución del closure y restaurarlo automáticamente al salir.
Es útil para incluir información temporal en los logs durante pruebas u operaciones localizadas.
Hidden Context
Los datos que no deben aparecer en los logs (contraseñas, claves de API, PII) se guardan en el “Hidden Context”. No pueden leerse conget; solo con métodos dedicados como getHidden.
Transferencia a jobs de cola
Al despachar un job, el contexto actual se serializa automáticamente en el payload del job. Al ejecutarse el job se restaura el contexto original, por lo que eltrace_id establecido en la solicitud aparece también en los logs de la cola.
trace_id de la solicitud también aparece en los logs de la cola.
Dehydrating — personalizar al enviar el job
ConContext::dehydrating puedes ajustar el contexto justo antes de enviar el job.
Por ejemplo, pasar a la cola el locale determinado por la cabecera Accept-Language.
Hydrated — restauración al ejecutar el job
Context::hydrated te permite añadir lógica justo cuando se restaura el contexto, antes de ejecutar el job.
Por ejemplo, aplicar al archivo de configuración el locale guardado.
Resumen
Diferencia entre Context y Log::withContext
Diferencia entre Context y Log::withContext
Patrones habituales de Dehydrate/Hydrate
Patrones habituales de Dehydrate/Hydrate
- Transferencia del locale: guarda
app.localeen el Hidden Context endehydratingy restáuralo conConfig::setenhydrated. - Propagación de la información de autenticación: hacer que el job pueda consultar el usuario autenticado en la solicitud.
- ID de tenant: compartir el identificador de tenant entre solicitudes y jobs en aplicaciones multitenant.