7.4.2.9. Request ID

Le Request ID est un identifiant métier de corrélation qui doit être positionné par l’appelant.

Il permet de suivre un traitement à travers tous les services qui y participent.

Cet identifiant est transporté par le header HTTP « X-REQUEST-ID ».

7.4.2.9.1. Filtre client

Classe : fr.gouv.vitam.common.client2.RequestIdClientFilter

Récupère le Request ID depuis le VitamSession et le positionne dans le Header « X-REQUEST-ID ».

Ce filtre est référencé dans fr.gouv.vitam.common.client2.AbstractCommonClient.AbstractCommonClient(VitamClientFactoryInterface<?>).

7.4.2.9.2. Sauvegarde dans le thread local

Package : fr.gouv.vitam.common.thread

Le Request ID est sauvegardé dans l’objet VitamSession qui est positionné dans le VitamThreadFactory.VitamThread qui étend le thread local.

Le VitamThreadPoolExecutor gère la recopie du VitamSession d’un thread père vers un thread fils.

Le VitamThreadPoolExecutor.VitamRunnable encapsule le VitamThreadFactory.VitamThread.

VitamThreadUtils permet de récupérer le VitamSession. Si l’état du thread ne le permet pas, une VitamThreadAccessException est levée.

7.4.2.9.3. Filtre Serveur

Classe : fr.gouv.vitam.common.server2.RequestIdContainerFilter

Extrait le Request ID depuis le Header « X-REQUEST-ID » et le positionne dans le VitamSession.

Ce filtre est référencé dans fr.gouv.vitam.common.server2.application.AbstractVitamApplication.buildApplicationHandler()

Si le request ID présent dans la session n’était pas nul, on trace un warning.

7.4.2.9.4. Affichage dans les logs

Pour afficher le request ID dans les logs, le mécanisme MDC de Logback est utilisé : http://logback.qos.ch/manual/mdc.html

Dans le VitamSession, lorsque qu’on fait un setRequestId, cela positionne la valeur au niveau du MDC :

MDC.put(GlobalDataRest.X_REQUEST_ID, newRequestId);

Dans la configuration de Logback, on rajoute %X{X-REQUEST-ID} dans le pattern de log. Par exemple :

<pattern>%d{ISO8601} [%thread] [**%X{X-REQUEST-ID}**] %-5level %logger - %replace(%caller{1..2}){'Caller\+1    at |\n',''} : %msg %rootException{5}%n</pattern>