You can use Logback's Mapped Diagnotic Context to propagate a unique tracking number to every log message.
There are two parts to this:
Push your unique tracking number into MDC e.g. MDC.put("uniqueTrackingNumber", the_unique_tracking_number);
Include the MDC entry in your log statements. You do this by specifying it in your logging pattern. So, if you store the unique tracking number in a MDC entry named uniqueTrackingNumber
then you would include it in your emitted log events by defining a layout like this:
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] [%X{uniqueTrackingNumber}] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
More details in the docs.
I presume that the scope of a "unique tracking number" is limited to a request (or a single 'flow' through your application)? If so, then you'll want to identify some throttle point where you can push the MDC value on the way in. In the Spring Boot world this is likely to be a Filter
. Something like this, perhaps:
@Component
public static class UniqueTrackingNumberFilter extends OncePerRequestFilter() {
@Override
protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// presumably this is extracted from the request (or defaulted, if not supplied)
int uniqueTrackingNumber = ;
MDC.put("uniqueTrackingNumber", uniqueTrackingNumber);
}
}
Alternatively you could extend Logback's MDCInsertingServletFilter
to extract whatever you want from the request and push it into MDC.