public void updateLoggerConfiguration()

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


    public void updateLoggerConfiguration(final String pid, final Dictionary<?, ?> configuration, final boolean performRefresh)
    throws ConfigurationException {

        if (configuration != null) {

            String pattern = (String) configuration.get(LogConfigManager.LOG_PATTERN);
            final String level = (String) configuration.get(LogConfigManager.LOG_LEVEL);
            String fileName = (String) configuration.get(LogConfigManager.LOG_FILE);
            final Set<String> categories = toCategoryList(configuration.get(LogConfigManager.LOG_LOGGERS));
            final boolean additiv;
            if ( configuration.get(LogConfigManager.LOG_ADDITIV) != null ) {
                additiv = Boolean.valueOf(configuration.get(LogConfigManager.LOG_ADDITIV).toString());
            } else {
                // If an appender is explicitly defined then set additive to false
                // to be compatible with earlier Sling Logging behavior
                additiv = false;
            }

            // verify categories
            if (categories == null) {
                throw new ConfigurationException(LogConfigManager.LOG_LOGGERS, "Missing categories in configuration "
                    + pid);
            }

            // verify no other configuration has any of the categories
            for (final String cat : categories) {
                final LogConfig cfg = configByCategory.get(cat);
                if (cfg != null && !pid.equals(cfg.getConfigPid())) {
                    throw new ConfigurationException(LogConfigManager.LOG_LOGGERS, "Category " + cat
                        + " already defined by configuration " + cfg.getConfigPid());
                }
            }

            // verify log level
            if (level == null) {
                throw new ConfigurationException(LogConfigManager.LOG_LEVEL, "Value required");
            }

            final Level logLevel;
            final boolean resetToDefault;
            if (LOG_LEVEL_RESET_TO_DEFAULT.equalsIgnoreCase(level)){
                resetToDefault = true;
                logLevel = null;
            } else {
                logLevel = Level.toLevel(level);
                resetToDefault = false;
            }

            // verify pattern
            if (pattern == null || pattern.length() == 0) {
                pattern = LogConfigManager.LOG_PATTERN_DEFAULT;
            }

            //Map empty fileName to console logger
            //null fileName is for scenario where intention is just to change the log level
            if (fileName != null && fileName.trim().length() == 0) {
                fileName = LogWriter.FILE_NAME_CONSOLE;
            }

            // FileName being just null means that we want to change the
            // LogLevel
            if (fileName != null && !isConsole(fileName)) {
                fileName = getAbsoluteFilePath(fileName);
            }

            // create or modify existing configuration object
            final LogConfig newConfig = new LogConfig(this, pattern, categories, logLevel, fileName, additiv,
                    pid, loggerContext, resetToDefault);
            if (isPackagingDataEnabled()) {
                newConfig.setPostProcessor(new OSGiAwareExceptionHandling(logbackManager.getPackageInfoCollector()));
            }
            LogConfig oldConfig = configByPid.get(pid);
            if (oldConfig != null) {
                configByCategory.keySet().removeAll(oldConfig.getCategories());
            }

            // relink categories
            for (String cat : categories) {
                configByCategory.put(cat, newConfig);
            }

            configByPid.put(pid, newConfig);

        } else {

            // configuration deleted if null

            // remove configuration from pid list
            LogConfig config = configByPid.remove(pid);

            if (config != null) {
                // remove all configured categories
                configByCategory.keySet().removeAll(config.getCategories());
            }

        }

        if (performRefresh) {
            logbackManager.configChanged();
        }
    }