in log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MutableThreadContextMapFilter.java [423:494]
private static ConfigResult getConfig(
final LastModifiedSource source, final AuthorizationProvider authorizationProvider) {
final File inputFile = source.getFile();
InputStream inputStream = null;
HttpInputStreamUtil.Result result;
final long lastModified = source.getLastModified();
URI uri = source.getURI();
if (inputFile != null && inputFile.exists()) {
try {
final long modified = inputFile.lastModified();
if (modified > lastModified) {
source.setLastModified(modified);
inputStream = Files.newInputStream(inputFile.toPath());
result = new HttpInputStreamUtil.Result(Status.SUCCESS);
} else {
result = new HttpInputStreamUtil.Result(Status.NOT_MODIFIED);
}
} catch (Exception ex) {
result = new HttpInputStreamUtil.Result(Status.ERROR);
}
} else if (uri != null && (HTTP.equalsIgnoreCase(uri.getScheme()) || HTTPS.equalsIgnoreCase(uri.getScheme()))) {
try {
result = HttpInputStreamUtil.getInputStream(source, authorizationProvider);
inputStream = result.getInputStream();
} catch (ConfigurationException ex) {
result = new HttpInputStreamUtil.Result(Status.ERROR);
}
} else {
result = new HttpInputStreamUtil.Result(Status.NOT_FOUND);
}
final ConfigResult configResult = new ConfigResult();
if (result.getStatus() == Status.SUCCESS) {
LOGGER.debug("Processing Debug key/value pairs from: {}", source.toString());
try {
final KeyValuePairConfig keyValuePairConfig = MAPPER.readValue(inputStream, KeyValuePairConfig.class);
if (keyValuePairConfig != null) {
final Map<String, String[]> configs = keyValuePairConfig.getConfigs();
if (configs != null && !configs.isEmpty()) {
final List<KeyValuePair> pairs = new ArrayList<>();
for (Map.Entry<String, String[]> entry : configs.entrySet()) {
final String key = entry.getKey();
for (final String value : entry.getValue()) {
if (value != null) {
pairs.add(new KeyValuePair(key, value));
} else {
LOGGER.warn("Ignoring null value for {}", key);
}
}
}
if (!pairs.isEmpty()) {
configResult.pairs = pairs.toArray(EMPTY_ARRAY);
configResult.status = Status.SUCCESS;
} else {
configResult.status = Status.EMPTY;
}
} else {
LOGGER.debug("No configuration data in {}", source.toString());
configResult.status = Status.EMPTY;
}
} else {
LOGGER.warn("No configs element in MutableThreadContextMapFilter configuration");
configResult.status = Status.ERROR;
}
} catch (Exception ex) {
LOGGER.warn("Invalid key/value pair configuration, input ignored: {}", ex.getMessage());
configResult.status = Status.ERROR;
}
} else {
configResult.status = result.getStatus();
}
return configResult;
}