I’m pleased to announced that I have now released new versions of the spt-development-*-spring-boot projects for integrating the spt-development libraries related to correlation IDs, logging and auditing, into Spring Boot applications. These new releases along with new releases of some of the projects they relate to, have been updated to integrate with the slf4j MDC context. Providing a simpler way of including the correlation ID in your logs. As always, the source is available on GitHub and the artifacts are also available in Maven Central for easy inclusion in your own Java projects.
The following projects have all been updated to v2.0.10:
Additionally, the following libraries have also been updated:
- spt-development-audit-spring - v2.0.10
- spt-development-cid-jms-spring - v2.0.8
- spt-development-cid-web - v2.0.5
- spt-development-logging-spring - v2.0.8
I have also upgraded the demo project to v2.0.10 of all the libraries above.
Mapped Diagnostic Context
Simply adding v2.0.10 spt-development-cid-web-spring-boot-starter or spt-development-cid-jms-spring-boot-starter (depending on your requirements) as a dependency to your project, will be enough to have the correlation ID added to the Mapped Diagnostic Context of the underlying logging system you are using. The correlation ID will be added with slf4j’s MDC class, for each new HTTP request or JMS message received. In order for the correlation ID to appear in your logs, you will need to update your logging pattern to include a reference to the MDC key as shown in a section of application.yml taken from the demo, project below.
Here the default key of
cid is being used. You will also notice the use of the
replace is being used so that the correlation ID
is only output when set, so that any logging output by Spring Boot before the request filter or JMS listener fires, is output without the
correlation ID. NOTE the default key can be customised with the
If you are upgrading from v2.0.9 and you have followed the suggested approach of including the
correlation ID in all of your application’s log statements demonstrated in this post, you will need
to remove the
CorrelationId.get() call or accept that you will have the correlation ID appear twice each for each entry in your logs.
shows the changes made to the demo project to remove the explicit inclusion of correlation IDs in the logs. On the plus side, if you are using
spt-development-logging-spring-boot, the number of changes will be reduced.
Although it is the default functionality and recomended approach, if you don’t want to use MDC, maybe because you already have
in log statements scattered throughout your code, then it it is possible to disable this new functionality by setting the
spt.cid.mdc.disabled property to
The demo project build has been extended to run with a new
mdc-disabled profile to prove that the libraries function correctly when this property is set. This
is purely for demonstration and testing purposes however and not expected to be used to switch this functionality on and off in production, although there is
no reason why it couldn’t be.
Why the U-turn
It was a concious decision early on not to use the MDC. However, having had feedback from various
users, it became eveident that this was a feature that was lacking in the library and having to explicitly add
CorrelationId.get() explicitly to log
statements was putting some people off from using the library.
Integration with Spring Cloud Sleuth is on the road map and the use of MDC is expected to make that integration simpler in the future.
I hope this helps the community, and if there are any questions or comments, please don’t hesitate to get in touch.