public void onResetComplete()

in src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java [548:617]


    public void onResetComplete(@NotNull LoggerContext context) {
        // The OSGi config based appenders are attached on reset complete as by that time Logback config
        // would have been parsed and various appenders and logger configured. Now we use the OSGi config
        // 1. If an appender with same name as one defined by OSGi config is found then it takes precedence
        // 2. If no existing appender is found then we create one
        Map<String, Appender<ILoggingEvent>> appendersByName = new HashMap<>();

        // build a map of all the appenders that were declared in the logback xml file
        Map<String, Appender<ILoggingEvent>> configuredAppenders = new HashMap<>();
        configuredAppenders.putAll(getKnownAppenders(AppenderOrigin.JORAN));
        configuredAppenders.putAll(getKnownAppenders(AppenderOrigin.JORAN_OSGI));

        final Map<Appender<ILoggingEvent>, LoggerSpecificEncoder> encoders = new HashMap<>();

        Set<String> configPids = new HashSet<>();
        for (LogConfig config : getLogConfigs()) {
            configPids.add(config.getConfigPid());
            Appender<ILoggingEvent> appender = null;
            if (config.isAppenderDefined()) {
                LogWriter lw = config.getLogWriter();

                final String appenderName = lw.getAppenderName();
                appender = appendersByName.get(appenderName);

                if (appender == null) {
                    appender = configuredAppenders.get(appenderName);
                    if (appender != null) {
                        addInfo(String.format(
                                "Found overriding configuration for appender %s in Logback config. OSGi config would be ignored",
                                appenderName));
                    }
                }

                if (appender == null) {
                    LoggerSpecificEncoder encoder = new LoggerSpecificEncoder(getDefaultLayout());
                    appender = lw.createAppender(loggerContext, encoder);
                    encoders.put(appender, encoder);
                    appendersByName.put(appenderName, appender);
                }

                if (encoders.containsKey(appender)) {
                    encoders.get(appender).addLogConfig(config);
                }
            }

            for (String category : config.getCategories()) {
                ch.qos.logback.classic.Logger targetLogger = loggerContext.getLogger(category);
                if (config.isResetToDefault()) {
                    targetLogger.setLevel(null);
                    targetLogger.setAdditive(true); // Reset additivity
                } else {
                    targetLogger.setLevel(config.getLogLevel());
                    if (appender != null) {
                        targetLogger.setAdditive(config.isAdditive());
                        targetLogger.addAppender(appender);
                        addInfo(String.format(
                                "Registering appender %s(%s) with logger %s",
                                appender.getName(), appender.getClass(), targetLogger.getName()));
                    }
                }
            }
            if (appender != null) {
                // remember what loggers we attached the appender to
                addedAppenderRef(AppenderOrigin.CONFIGSERVICE, appender.getName(), config.getCategories());
            }
        }

        // Record the config pids which have been picked up in this reset cycle
        context.putObject(LogConstants.CONFIG_PID_SET, configPids);
    }