public ConfigurationNode parse()

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();
    }