Qu’est-ce que Context
Context est le mécanisme de Laravel pour enregistrer et partager des informations entre les requêtes, les jobs de file d’attente et les commandes. Les informations ajoutées via la façadeIlluminate\Support\Facades\Context sont automatiquement ajoutées à chaque entrée de log écrite par l’application.
Cela permet de distinguer clairement les informations passées à un appel de log spécifique et celles partagées via Context.
Particulièrement utile pour le tracing dans les systèmes distribués ou basés sur des files d’attente.
Flux de propagation du contexte
Utilisation de base
Le cas le plus classique : définir untrace_id dans un middleware. Il apparaît alors automatiquement dans toutes les entrées de log qui suivent.
1
Créer le middleware
2
Ajouter un trace ID au Context
3
Enregistrer le middleware
Enregistrez-le comme middleware global dans
bootstrap/app.php.url et trace_id.
Écriture dans le contexte
add — Ajouter une valeur
add écrase les clés existantes. Pour n’ajouter que si la clé n’existe pas, utilisez addIf.
increment / decrement — Compteurs
Méthodes dédiées à l’incrémentation/décrémentation. Le second argument précise le pas.when — Ajout conditionnel
when permet d’ajouter des données différentes selon un booléen.
push — Empiler dans une pile
Context gère des piles pour des données de type liste.push empile dans l’ordre d’ajout.
Lecture du contexte
get / all
only / except — Sous-ensembles
pull / pop — Lire et supprimer
pull lit la valeur puis la retire du contexte.
pop.
remember — Définir si absent
has / missing — Existence d’une clé
has retourne true même si la valeur stockée est null. Elle vérifie uniquement la présence de la clé.Suppression
Utilisezforget pour supprimer une clé.
Contexte scopé
scope modifie temporairement le contexte pour la durée d’une closure, puis restaure l’état initial.
Pratique pour joindre des informations locales à vos logs.
Hidden Context
Les données à ne pas exposer dans les logs (mots de passe, clés d’API, données personnelles) doivent être placées dans le Hidden Context.get normal ne les retourne pas ; utilisez les méthodes dédiées getHidden.
Transmission aux jobs de queue
Quand un job est dispatché, le contexte est automatiquement sérialisé dans le payload. Il est restauré à l’exécution du job, ce qui permet autrace_id défini pendant la requête d’être présent dans les logs de la queue.
trace_id de la requête est bien présent dans les logs du job.
Dehydrating — Personnaliser l’envoi du job
Context::dehydrating permet de modifier le contexte juste avant l’envoi du job.
Par exemple, pour transmettre la locale déterminée par l’en-tête Accept-Language.
Hydrated — Restauration lors de l’exécution du job
Context::hydrated s’exécute juste avant que le job ne démarre, une fois le contexte restauré.
Par exemple, pour réappliquer la locale stockée dans la configuration.
Récapitulatif
Différence entre Context et Log::withContext
Différence entre Context et Log::withContext
Patterns Dehydrate/Hydrate courants
Patterns Dehydrate/Hydrate courants
- Transmission de locale : sauvegarder
app.localeen Hidden Context viadehydrating, puis restaurer viaConfig::setdanshydrated. - Propagation d’authentification : partager les informations de l’utilisateur authentifié entre la requête et le job.
- ID de tenant : partager l’identifiant de tenant entre requête et job dans une application multi-tenant.