Associer vos logs Java à vos traces
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Associer vos logs Java à vos traces

Injection automatique d’ID de trace

Activez l’injection dans la configuration du traceur Java en ajoutant -Ddd.logs.injection=true comme argument de démarrage jvm ou via la variable d’environnement DD_LOGS_INJECTION=true.

Si vos logs sont au format brut, modifiez votre formateur en ajoutant dd.trace_id et dd.span_id à la configuration de votre logger :

<Pattern>"%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %X{dd.trace_id:-0} %X{dd.span_id:-0} - %m%n"</Pattern>

Si vos logs sont au format JSON et que vous utilisez Logback, vous n’avez plus rien à faire. Si vous utilisez une autre bibliothèque de logging, vous devez activer l’auto-injection des attributs MDC dans vos logs.

Injection manuelle d’ID de trace

Si vous préférez corréler manuellement vos traces avec vos logs, utilisez l’API Datadog pour récupérer les identificateurs de corrélation :

  • Utilisez les méthodes d’API CorrelationIdentifier#getTraceId() et CorrelationIdentifier#getSpanId() pour injecter les identificateurs au début et à la fin de chaque span dans vos logs (voir les exemples ci-dessous).
  • Configurez MDC pour utiliser les clés injectées :

    • dd.trace_id : l’ID de la trace active lors de l’écriture du message de log (ou 0 en l’absence de trace).
    • dd.span_id : l’ID de la span active lors de l’écriture du message de log (ou 0 en l’absence de trace).
import org.apache.logging.log4j.ThreadContext;
import datadog.trace.api.CorrelationIdentifier;

// Des spans doivent avoir été initialisées et être actives avant ce bloc.
try {
    ThreadContext.put("dd.trace_id", String.valueOf(CorrelationIdentifier.getTraceId()));
    ThreadContext.put("dd.span_id", String.valueOf(CorrelationIdentifier.getSpanId()));
}

// Loguer quelque chose

finally {
    ThreadContext.remove("dd.trace_id");
    ThreadContext.remove("dd.span_id");
}
import org.slf4j.MDC;
import datadog.trace.api.CorrelationIdentifier;

// Des spans doivent avoir été initialisées et être actives avant ce bloc.
try {
    MDC.put("dd.trace_id", String.valueOf(CorrelationIdentifier.getTraceId()));
    MDC.put("dd.span_id", String.valueOf(CorrelationIdentifier.getSpanId()));
}

// Loguer quelque chose

finally {
    MDC.remove("dd.trace_id");
    MDC.remove("dd.span_id");
}

Modifiez ensuite la configuration de votre logger en ajoutant dd.trace_id et dd.span_id à votre pattern de log :

<Pattern>"%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %X{dd.trace_id:-0} %X{dd.span_id:-0} - %m%n"</Pattern>

Remarque : si vous n’utilisez pas une intégration de log de Datadog pour analyser vos logs, des règles de parsing de log personnalisées doivent s’assurer que dd.trace_id et dd.span_id sont analysés en tant que chaînes de caractères. Pour en savoir plus, consultez la FAQ à ce sujet.

Consultez la documentation relative à la journalisation Java pour en savoir plus sur l’implémentation d’un logger spécifique ou découvrir comment créer des logs au format JSON.

Pour aller plus loin