logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Remko Popma <remko.po...@gmail.com>
Subject Re: Non-String values in Thread Context Map (MDC)
Date Sun, 03 Nov 2019 08:57:29 GMT
Short story longer: while there is no public API for putting non-String values in the context
map, the work done in that ticket and https://issues.apache.org/jira/browse/LOG4J2-1660 provide
the hooks for installing a custom data structure for the context map. This data structure
may support non-string values. I used these hooks to install a garbage free hybrid Object/primitive
map in the trading system at work. Unfortunately this data structure  is not open source but
it’s not rocket science either; it’s basically an extension of the array based string
map in Log4j2 with a separate long[] array for the primitive values. You may need to provide
a separate facade that the application can use instead of ThreadContext; this facade can provide
methods like putLong(String, long) which are not available in the Log4j ThreadContext. 

(Shameless plug) Every java main() method deserves http://picocli.info

> On Nov 3, 2019, at 17:31, Remko Popma <remko.popma@gmail.com> wrote:
> 
> Volkan, 
> 
> See https://issues.apache.org/jira/browse/LOG4J2-1648 for more details. 
> 
> Remko.
> 
> (Shameless plug) Every java main() method deserves http://picocli.info
> 
>>> On Nov 3, 2019, at 13:57, Ralph Goers <ralph.goers@dslextreme.com> wrote:
>>> 
>> No. Our experience has shown that putting non-String values in ThreadLocals has
to be done very carefully, so to make sure there aren’t any problems the ThreadContextMap
only allows Strings.
>> 
>> Ralph
>> 
>>> On Nov 2, 2019, at 1:11 PM, Volkan Yazıcı <volkan.yazici@gmail.com> wrote:
>>> 
>>> Hello,
>>> 
>>> LogEvent#getContextData() returns a ReadOnlyStringMap such that the
>>> provided get() and forEach() allow non-String values in the entries. That
>>> said, ReadOnlyStringMap#toMap() returns a Map<String, String>. Further,
>>> both ThreadContext.put() and ThreadContext.putAll() only allow String
>>> values. I am confused by this inconsistency. Is there a way to provide an
>>> MDC entry where the value is of a non-String type?
>>> 
>>> Best.
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>> 

Mime
  • Unnamed multipart/alternative (inline, 7-Bit, 0 bytes)
View raw message