in log4j-converter-config/src/main/java/org/apache/logging/converter/config/internal/v2/PropertiesV2ConfigurationParser.java [83:155]
public ConfigurationNode parse(InputStream inputStream) throws IOException {
Properties props = new Properties();
props.load(inputStream);
PropertiesSubset rootProperties = PropertiesSubset.of("", props);
ConfigurationNodeBuilder builder = newNodeBuilder().setPluginName(CONFIGURATION_PLUGIN_NAME);
PropertiesSubset propertyPlaceholders = extractSubset(rootProperties, "property");
if (isNotEmpty(propertyPlaceholders)) {
builder.addChild(processPropertyPlaceholders(propertyPlaceholders));
}
PropertiesSubset scriptProperties = extractSubset(rootProperties, "script");
if (isNotEmpty(scriptProperties)) {
builder.addChild(processScripts(scriptProperties));
}
PropertiesUtils.throwIfNotEmpty(scriptProperties);
PropertiesSubset customLevels = extractSubset(rootProperties, "customLevel");
if (isNotEmpty(customLevels)) {
builder.addChild(processCustomLevels(customLevels));
}
PropertiesUtils.throwIfNotEmpty(customLevels);
// Filters
PropertiesSubset filtersProperties = extractSubset(rootProperties, "filter");
String filterNames = extractProperty(rootProperties, "filters");
final Stream<? extends PropertiesSubset> filtersStream = filterNames != null
? partitionOnGivenPrefixes(filtersProperties, filterNames)
: partitionOnCommonPrefixes(filtersProperties);
Collection<ConfigurationNode> filters =
filtersStream.map(p -> processGenericComponent("filter", p)).collect(Collectors.toList());
if (!filters.isEmpty()) {
builder.addChild(wrapFilters(filters));
}
PropertiesUtils.throwIfNotEmpty(filtersProperties);
// Appenders
PropertiesSubset appendersProperties = extractSubset(rootProperties, "appender");
String appenderNames = extractProperty(rootProperties, "appenders");
final Stream<? extends PropertiesSubset> appendersStream = appenderNames != null
? partitionOnGivenPrefixes(appendersProperties, appenderNames)
: partitionOnCommonPrefixes(appendersProperties);
Collection<ConfigurationNode> appenders = appendersStream
.map(PropertiesV2ConfigurationParser::processAppender)
.collect(Collectors.toList());
builder.addChild(createAppenders(appenders));
PropertiesUtils.throwIfNotEmpty(appendersProperties);
ConfigurationNodeBuilder loggersBuilder = newNodeBuilder().setPluginName(LOGGERS_PLUGIN_NAME);
// 1. Start with the root logger
PropertiesSubset rootLoggerProperties = extractSubset(rootProperties, "rootLogger");
loggersBuilder.addChild(processRootLogger(rootLoggerProperties));
PropertiesUtils.throwIfNotEmpty(rootLoggerProperties);
// 2. The remaining loggers
PropertiesSubset loggersProperties = extractSubset(rootProperties, "logger");
String loggersName = extractProperty(rootProperties, "loggers");
final Stream<? extends PropertiesSubset> loggersStream = loggersName != null
? partitionOnGivenPrefixes(loggersProperties, loggersName)
: partitionOnCommonPrefixes(loggersProperties);
loggersStream.map(PropertiesV2ConfigurationParser::processLogger).forEach(loggersBuilder::addChild);
PropertiesUtils.throwIfNotEmpty(loggersProperties);
// Add the `Loggers` plugin
builder.addChild(loggersBuilder.get());
// Extract attributes of Configuration
for (final String key : rootProperties.getProperties().stringPropertyNames()) {
if (!key.contains(".")) {
builder.addAttribute(key, extractProperty(rootProperties, key));
}
}
PropertiesUtils.throwIfNotEmpty(rootProperties);
return builder.get();
}