Scott Harrington created LOG4J2-745:
---------------------------------------

             Summary: Plugins can cause ConverterKeys collisions with 
unpredictable results
                 Key: LOG4J2-745
                 URL: https://issues.apache.org/jira/browse/LOG4J2-745
             Project: Log4j 2
          Issue Type: Improvement
            Reporter: Scott Harrington
            Priority: Minor


If I create a Converter plugin with ConverterKeys of "d" or "m" then there will 
be a collision with the built-in DatePatternConverter or 
MessagePatternConverter.

It is unpredictable which plugin gets used.

I see two resolutions:
(1) detect collisions in PatternParser and emit a warning so we know which 
implementation will be used
(2) use whichever Log4j2Plugins.dat appeared first in the CLASSPATH

Predictable iteration order is usually accomplished by replacing HashMaps with 
LinkedHashMaps. Could easily do this for thie PluginManager.plugins field. But 
PluginRegistry uses a ConcurrentHashMap.

Is there a good reason to use ConcurrentHashMaps in PluginRegistry? It doesn't 
really give you any concurrency -- a caller to PluginManager.getPlugins could 
see a partially-loaded map if collectPlugins was still running. Why not 
synchronize collectPlugins and/or loadPlugins, and force any concurrent caller 
to getPlugins to wait until the loading was complete.

I would give it a stab but I see other more important changes are probably 
underway for LOG4J2-741 and LOG4J2-673 and this can probably wait.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to