I implemented the following simple application in order to understand how to play with baggage.
application.yaml:
management:
tracing:
enabled: true
baggage:
enabled: true
remote-fields:
- my-token
TokenFilter
@RequiredArgsConstructor
@Slf4j
@Component
public class TokenFilter implements Filter {
private final Tracer tracer;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws ServletException, IOException {
final String myTokenValue = ((HttpServletRequest) servletRequest).getHeader("my_token");
log.info("Token value is '{}'", myTokenValue);
try (BaggageInScope myToken = tracer.createBaggageInScope("my_token", myTokenValue)) {
log.info("Bagage content is {}", myToken.get());
log.info("All baggages are {}", tracer.getAllBaggage());
} catch (Exception exc) {
log.error(exc.getMessage());
}
filterChain.doFilter(servletRequest, servletResponse);
}
}
Controller
@RestController
@RequiredArgsConstructor
@Slf4j
public class SampleController {
private final Tracer tracer;
@GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE)
public void sample() {
log.info("Baggages are {}", tracer.getAllBaggage());
}
}
Resulting log
2024-02-27T15:36:24.991+01:00 INFO 3688 --- [nio-8080-exec-1] [65ddf368f5abedefc5907ffcd8e8138e-c5907ffcd8e8138e] c.t.micrometersample.filter.TokenFilter : Token value is 'token value'
2024-02-27T15:36:24.993+01:00 INFO 3688 --- [nio-8080-exec-1] [65ddf368f5abedefc5907ffcd8e8138e-c5907ffcd8e8138e] c.t.micrometersample.filter.TokenFilter : Bagage content is null
2024-02-27T15:36:24.993+01:00 INFO 3688 --- [nio-8080-exec-1] [65ddf368f5abedefc5907ffcd8e8138e-c5907ffcd8e8138e] c.t.micrometersample.filter.TokenFilter : All baggages are {}
2024-02-27T15:36:25.005+01:00 INFO 3688 --- [nio-8080-exec-1] [65ddf368f5abedefc5907ffcd8e8138e-c5907ffcd8e8138e] c.t.m.controller.SampleController : Baggages are {}
What is missing/incorrect that prevents to properly manage the baggage ?
Regards
Frederic