Search in sources :

Example 1 with PropertiesLookup

use of org.apache.logging.log4j.core.lookup.PropertiesLookup in project logging-log4j2 by apache.

the class AbstractConfiguration method doConfigure.

protected void doConfigure() {
    processConditionals(rootNode);
    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) {
            StrLookup lookup = (StrLookup) first.getObject();
            runtimeStrSubstitutor.setVariableResolver(lookup);
            configurationStrSubstitutor.setVariableResolver(lookup);
        }
    } else {
        final Map<String, String> map = this.getComponent(CONTEXT_PROPERTIES);
        final StrLookup lookup = map == null ? null : new PropertiesLookup(map);
        Interpolator interpolator = new Interpolator(lookup, pluginPackages);
        runtimeStrSubstitutor.setVariableResolver(interpolator);
        configurationStrSubstitutor.setVariableResolver(interpolator);
    }
    boolean setLoggers = false;
    boolean setRoot = false;
    for (final Node child : rootNode.getChildren()) {
        if (child.getName().equalsIgnoreCase("Properties")) {
            if (tempLookup == runtimeStrSubstitutor.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")) {
            if (scriptManager != null) {
                scriptManager.addScripts(child);
            }
        } 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();
}
Also used : AsyncAppender(org.apache.logging.log4j.core.appender.AsyncAppender) Appender(org.apache.logging.log4j.core.Appender) ConsoleAppender(org.apache.logging.log4j.core.appender.ConsoleAppender) Node(org.apache.logging.log4j.plugins.Node) AsyncLoggerConfig(org.apache.logging.log4j.core.async.AsyncLoggerConfig) StrLookup(org.apache.logging.log4j.core.lookup.StrLookup) Filter(org.apache.logging.log4j.core.Filter) Interpolator(org.apache.logging.log4j.core.lookup.Interpolator) List(java.util.List) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) LinkedHashMap(java.util.LinkedHashMap) PropertiesLookup(org.apache.logging.log4j.core.lookup.PropertiesLookup)

Aggregations

ArrayList (java.util.ArrayList)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)1 Appender (org.apache.logging.log4j.core.Appender)1 Filter (org.apache.logging.log4j.core.Filter)1 AsyncAppender (org.apache.logging.log4j.core.appender.AsyncAppender)1 ConsoleAppender (org.apache.logging.log4j.core.appender.ConsoleAppender)1 AsyncLoggerConfig (org.apache.logging.log4j.core.async.AsyncLoggerConfig)1 Interpolator (org.apache.logging.log4j.core.lookup.Interpolator)1 PropertiesLookup (org.apache.logging.log4j.core.lookup.PropertiesLookup)1 StrLookup (org.apache.logging.log4j.core.lookup.StrLookup)1 Node (org.apache.logging.log4j.plugins.Node)1