Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.8.1
-
None
-
None
Description
Hello everybody,
I found a possible bug in class CompositeConfiguration: Unable to determine URI for configuration. However, the reconfiguration is completed.
The solution:
In line 154, Class CompositeConfiguration [log4j-core-2.8.1.jar] change the condition:
if (sourceURI != null)" --> "if (sourceURI == null)
Original code:
145 @Override 146 public Configuration reconfigure() { 147 LOGGER.debug("Reconfiguring composite configuration"); 148 final List<AbstractConfiguration> configs = new ArrayList<>(); 149 final ConfigurationFactory factory = ConfigurationFactory.getInstance(); 150 for (final AbstractConfiguration config : configurations) { 151 final ConfigurationSource source = config.getConfigurationSource(); 152 final URI sourceURI = source.getURI(); 153 Configuration currentConfig; 154 if (sourceURI != null) { 155 LOGGER.warn("Unable to determine URI for configuration {}, changes to it will be ignored", 156 config.getName()); 157 currentConfig = factory.getConfiguration(getLoggerContext(), config.getName(), sourceURI); 158 if (currentConfig == null) { 159 LOGGER.warn("Unable to reload configuration {}, changes to it will be ignored", config.getName()); 160 currentConfig = config; 161 } 162 } else { 163 currentConfig = config; 164 } 165 configs.add((AbstractConfiguration) currentConfig); 166 167 } 168 169 return new CompositeConfiguration(configs); 170 }
So it makes sense, because after that it will be tried to reload the configuration again, and if it does not work, I get a warn, otherwise is ok.
The changed code might look like this:
@Override public Configuration reconfigure() { LOGGER.debug("Reconfiguring composite configuration"); final List<AbstractConfiguration> configs = new ArrayList<>(); final ConfigurationFactory factory = ConfigurationFactory.getInstance(); for (final AbstractConfiguration config : configurations) { final ConfigurationSource source = config.getConfigurationSource(); final URI sourceURI = source.getURI(); if (sourceURI == null) { LOGGER.warn("Unable to determine URI for configuration {}, changes to it will be ignored", config.getName()); Configuration currentConfig = factory.getConfiguration(getLoggerContext(), config.getName(), sourceURI); if (currentConfig == null) { LOGGER.warn("Unable to reload configuration {}, changes to it will be ignored", config.getName()); } else { LOGGER.info("Able to reload configuration {}, changes to it will be completed", config.getName()); configs.add((AbstractConfiguration) currentConfig); } } else { configs.add(config); } } return new CompositeConfiguration(configs); }
Your feedback and questions are welcome. Thanks!
Best regards,
rri