org.apache.logging.log4j.core.lookup.StrLookup Java Examples

The following examples show how to use org.apache.logging.log4j.core.lookup.StrLookup. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: PropertiesPlugin.java    From logging-log4j2 with Apache License 2.0 5 votes vote down vote up
/**
 * Creates the Properties component.
 * @param properties An array of Property elements.
 * @param config The Configuration.
 * @return An Interpolator that includes the configuration properties.
 */
@PluginFactory
public static StrLookup configureSubstitutor(@PluginElement("Properties") final Property[] properties,
                                             @PluginConfiguration final Configuration config) {
    if (properties == null) {
        return new Interpolator(config.getProperties());
    }
    final Map<String, String> map = new HashMap<>(config.getProperties());

    for (final Property prop : properties) {
        map.put(prop.getName(), prop.getValue());
    }

    return new Interpolator(new MapLookup(map), config.getPluginPackages());
}
 
Example #2
Source File: AbstractConfiguration.java    From logging-log4j2 with Apache License 2.0 4 votes vote down vote up
protected void doConfigure() {
    preConfigure(rootNode);
    configurationScheduler.start();
    if (rootNode.hasChildren() && rootNode.getChildren().get(0).getName().equalsIgnoreCase("Properties")) {
        final Node first = rootNode.getChildren().get(0);
        createConfiguration(first, null);
        if (first.getObject() != null) {
            subst.setVariableResolver((StrLookup) first.getObject());
        }
    } else {
        final Map<String, String> map = this.getComponent(CONTEXT_PROPERTIES);
        final StrLookup lookup = map == null ? null : new MapLookup(map);
        subst.setVariableResolver(new Interpolator(lookup, pluginPackages));
    }

    boolean setLoggers = false;
    boolean setRoot = false;
    for (final Node child : rootNode.getChildren()) {
        if (child.getName().equalsIgnoreCase("Properties")) {
            if (tempLookup == subst.getVariableResolver()) {
                LOGGER.error("Properties declaration must be the first element in the configuration");
            }
            continue;
        }
        createConfiguration(child, null);
        if (child.getObject() == null) {
            continue;
        }
        if (child.getName().equalsIgnoreCase("Scripts")) {
            for (final AbstractScript script : child.getObject(AbstractScript[].class)) {
                if (script instanceof ScriptRef) {
                    LOGGER.error("Script reference to {} not added. Scripts definition cannot contain script references",
                            script.getName());
                } else {
                    if (scriptManager != null) {
                        scriptManager.addScript(script);
                    }}
            }
        } else if (child.getName().equalsIgnoreCase("Appenders")) {
            appenders = child.getObject();
        } else if (child.isInstanceOf(Filter.class)) {
            addFilter(child.getObject(Filter.class));
        } else if (child.getName().equalsIgnoreCase("Loggers")) {
            final Loggers l = child.getObject();
            loggerConfigs = l.getMap();
            setLoggers = true;
            if (l.getRoot() != null) {
                root = l.getRoot();
                setRoot = true;
            }
        } else if (child.getName().equalsIgnoreCase("CustomLevels")) {
            customLevels = child.getObject(CustomLevels.class).getCustomLevels();
        } else if (child.isInstanceOf(CustomLevelConfig.class)) {
            final List<CustomLevelConfig> copy = new ArrayList<>(customLevels);
            copy.add(child.getObject(CustomLevelConfig.class));
            customLevels = copy;
        } else {
            final List<String> expected = Arrays.asList("\"Appenders\"", "\"Loggers\"", "\"Properties\"",
                    "\"Scripts\"", "\"CustomLevels\"");
            LOGGER.error("Unknown object \"{}\" of type {} is ignored: try nesting it inside one of: {}.",
                    child.getName(), child.getObject().getClass().getName(), expected);
        }
    }

    if (!setLoggers) {
        LOGGER.warn("No Loggers were configured, using default. Is the Loggers element missing?");
        setToDefault();
        return;
    } else if (!setRoot) {
        LOGGER.warn("No Root logger was configured, creating default ERROR-level Root logger with Console appender");
        setToDefault();
        // return; // LOG4J2-219: creating default root=ok, but don't exclude configured Loggers
    }

    for (final Map.Entry<String, LoggerConfig> entry : loggerConfigs.entrySet()) {
        final LoggerConfig loggerConfig = entry.getValue();
        for (final AppenderRef ref : loggerConfig.getAppenderRefs()) {
            final Appender app = appenders.get(ref.getRef());
            if (app != null) {
                loggerConfig.addAppender(app, ref.getLevel(), ref.getFilter());
            } else {
                LOGGER.error("Unable to locate appender \"{}\" for logger config \"{}\"", ref.getRef(),
                        loggerConfig);
            }
        }

    }

    setParents();
}