24th January, 2016 - Release of SLF4J 1.7.14
The assignment of the INITIALIZATION_STATE variable in LoggerFactory is now guaranteed to be consistent for multi-thread initializations. More specifically, only one thread will see INITIALIZATION_STATE as UNINITIALIZED with all other threads observing either ONGOING_INITIALIZATION or the final result of the initialization. However, SLF4J initialization is still non-blocking and re-entrant, in the sense that if some thread tries to obtain loggers during ongoing initialization by another (or same) thread, instances of SubstituteLogger are returned. This fixes SLF4J-167.
Moved delegation check loop from log4j-over-slf4j.jar to slf4j-log4j12.jar for better targeted loop checks. The rationale behind the change is explained by Frans Orsel in SLF4J-345 who also provided the relevant pull request.
During initialization the binding ambiguity check is skipped under Android in order to improve performance. This change was requested by Nitin Verma in SLF4J-328 who also provided the relevant patch.
The StaticMarkerBinder and StaticMDCBinder classes shipping in various SLF4J bindings now offer a getSingletion() method. The org.slf4j.MDC and MarkerFactory classes now perform binding by invoking the getSingleton() method first and if in the presence of an older version of SLF4J with said method missing, then by accessing the SINGLETON field. This backward compatible change was requested by Rufus Alexander in SLF4J-347 in order to implement an SLF4J binding in Clojure, namely slf4j-timbre.
Fix the OSGI Bundle-Version property in the MANIFEST.MF of osgi-over-slf4j module. This issue was reported by Antoine Dessaigne in SLF4J-341.