Skip to main content

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çade Illuminate\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 un trace_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.
Après cette configuration, les logs écrits dans les contrôleurs ou services contiennent automatiquement 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.
Exemple : enregistrer l’historique des requêtes SQL dans une pile.

Lecture du contexte

get / all

only / except — Sous-ensembles

pull / pop — Lire et supprimer

pull lit la valeur puis la retire du contexte.
Pour dépiler la dernière valeur d’une pile, utilisez 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

Utilisez forget 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.
Si vous modifiez un objet dans le scope, la modification persiste au-delà du scope. Ce n’est pas un problème pour les valeurs primitives.

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.
Le Hidden Context propose les mêmes méthodes que le contexte standard.

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 au trace_id défini pendant la requête d’être présent dans les logs de la queue.
Le 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.
Dans un callback dehydrating, n’utilisez pas la façade Context. Manipulez uniquement le $context passé en argument. L’utilisation de la façade modifierait le contexte du processus courant.

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.
Dans un callback hydrated aussi, n’utilisez pas la façade Context : manipulez uniquement le $context fourni.

Récapitulatif

Le Hidden Context n’est pas écrit dans les logs, il convient donc pour :
  • Identifiants de session ou utilisateur (à ne pas exposer)
  • Clés d’API et tokens d’authentification
  • Locale et valeurs de configuration à transmettre aux jobs sans polluer les logs
  • Flags internes et états
  1. Transmission de locale : sauvegarder app.locale en Hidden Context via dehydrating, puis restaurer via Config::set dans hydrated.
  2. Propagation d’authentification : partager les informations de l’utilisateur authentifié entre la requête et le job.
  3. ID de tenant : partager l’identifiant de tenant entre requête et job dans une application multi-tenant.
Dernière modification le 13 juillet 2026