Skip to main content

¿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 fachada Illuminate\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 un trace_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.
Con esta configuración, los logs que escribas desde controladores o servicios incluirán automáticamente 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

Con when 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. Con push los datos se apilan en el orden en que se añaden.
Ejemplo registrando el historial de consultas en una pila.

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.
Para sacar el último valor de una pila, usa 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 con forget.

Contexto con scope

Con scope, 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.
Si dentro del scope modificas un objeto, ese cambio se refleja también fuera. Con valores primitivos no hay problema.

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 con get; solo con métodos dedicados como getHidden.
El Hidden Context tiene los mismos métodos que el contexto normal.

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 el trace_id establecido en la solicitud aparece también en los logs de la cola.
Comprueba cómo el trace_id de la solicitud también aparece en los logs de la cola.

Dehydrating — personalizar al enviar el job

Con Context::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.
Dentro del callback dehydrating no uses la fachada Context; usa únicamente el repositorio $context que recibe el callback. Usar la fachada modificaría el contexto del proceso actual.

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.
Tampoco uses la fachada Context dentro de hydrated; usa solo el repositorio $context recibido.

Resumen

El Hidden Context no aparece en los logs, así que puedes guardar con seguridad:
  • IDs de sesión o de usuario (si no quieres dejarlos en el log)
  • Claves de API o tokens de autenticación
  • Locales o valores de configuración (los quieres transferir a la cola pero no loguear)
  • Flags o estados internos
  1. Transferencia del locale: guarda app.locale en el Hidden Context en dehydrating y restáuralo con Config::set en hydrated.
  2. Propagación de la información de autenticación: hacer que el job pueda consultar el usuario autenticado en la solicitud.
  3. ID de tenant: compartir el identificador de tenant entre solicitudes y jobs en aplicaciones multitenant.
Última modificación el 13 de julio de 2026