Contexto
Recientemente, mi equipo y yo estábamos trabajando en actualizaciones de bibliotecas de APIs que utilizan Spring Boot. Estas
actualizaciones se realizaron en proyectos que usaban el framework en la versión 2.7.X, y quisimos aprovechar la ocasión para subir a la versión 3.0.1,
disponible
desde Generally Available a finales de noviembre de 2022.
La guía de actualización disponible en el repositorio oficial del framework transcurrió bien, con el build y las pruebas automatizadas ejecutándose sin problemas.
Sin embargo, al ejecutar el proyecto y observar los logs, notamos la ausencia del Trace Id y del Span Id en los registros, los cuales
se enriquecen mediante el uso de la biblioteca Spring Cloud Sleuth.
2023-01-06T20:06:46.830-03:00 INFO [my-test-app,<TRACE_ID_HERE_BUT_EMPTY>,<SPAN_ID_HERE_BUT_EMPTY>] 29324 --- [nio-8080-exec-6] c.a.Loren : Loren ipsunProblema
Una lectura rápida de la documentación de Sleuth nos indica que este proyecto fue absorbido por Micrometer Tracing a partir de la versión 3.0 de Spring Boot, por lo que aparentemente quedó descontinuado a partir de la versión 3.1. Esto también lo confirma el GitHub oficial de Micrometer, donde se presenta una guía de migración.
Sin embargo, la guía de migración no parece estar completa, ya que seguirla no dio como resultado la correcta impresión de los datos de trazabilidad.
Por lo tanto, el objetivo del siguiente paso a paso es ayudarlos con esta migración.
Solución
- Verifique que el proyecto esté usando la versión 3.0 de Spring Boot;
plugins {
id("org.springframework.boot") version "3.0.1"
}- Elimine la dependencia de Sleuth;
implementation("org.springframework.cloud:spring-cloud-starter-sleuth")- Agregue la dependencia de Micrometer Tracing con el bridge para Brave, responsable de la creación de los tracers;
implementation("io.micrometer:micrometer-tracing-bridge-brave")- Si no la tiene, agregue la dependencia de Spring Actuator. Es necesaria para la autoconfiguración de Micrometer;
implementation("org.springframework.boot:spring-boot-starter-actuator")- Finalmente, siguiendo la guía de migración de Micrometer, agregue la propiedad de log pattern en el
archivo
.propertieso.ymlpara que el Trace Id y el Span Id se impriman correctamente;
logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]Al ejecutar nuevamente el proyecto, los Ids de Trace y Span volverán a funcionar correctamente.
2023-01-06T20:16:46.830-03:00 INFO [my-test-app,63b8a986c713b025bfcb74bfc7c64a77,bfcb74bfc7c64a77] 29324 --- [nio-8080-exec-6] c.a.Loren : Loren ipsunPara cualquier duda, estoy disponible a través de mis contactos.
Buen código para todos. 😎