Affects Version/s: 2.7
Fix Version/s: None
I would like to discuss possibilities for an API that allows users to put Object values in the ThreadContext.
Since 2.7, LogEvents can hold non-String values in their context data, but the Log4j API only allows users to put String values in the ThreadContext.
Not all ThreadContextMap implementations support Object values. For example, the default ThreadContextMap implementation only allows Strings, to prevent memory leaks in web apps.
Users need to configure Log4j to use one of the StringMap-based ThreadContextMap implementations, but even if they do so there is currently no API that allows them to actually use this and put arbitrary Objects in the thread context... How can we make this available?
- Add methods to the ThreadContext facade that allow getting and putting Object values, and getting a read-only copy of the StringMap. These methods throw an UnsupportedOperationException if the underlying ThreadContextMap implementation does not support the operation. There should also be a method that returns a boolean signifying whether the implementation supports Object values.
- Add a separate facade class, say, ObjectThreadContext that provides these methods
Without such an API, there is no clean alternative for users to achieve this. There is also no extension point that would allow them to leverage existing Log4j code when they build something custom for this.