public void updateLogWriter()

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


    public void updateLogWriter(@NotNull String pid, @Nullable Dictionary<?, ?> configuration, boolean performRefresh)
            throws ConfigurationException {

        if (configuration != null) {
            LogWriter oldWriter = writerByPid.get(pid);

            // get the log file parameter and normalize empty string to null
            String logFileName = (String) configuration.get(LogConstants.LOG_FILE);

            // Null logFileName is treated as Console Appender
            if (logFileName == null || logFileName.trim().isEmpty()) {
                logFileName = LogWriter.FILE_NAME_CONSOLE;
            }

            // if we have a file name, make it absolute and correct for our
            // environment and verify there is no other writer already existing
            // for the same file
            if (!LogWriter.FILE_NAME_CONSOLE.equals(logFileName)) {

                // ensure absolute path
                logFileName = getAbsoluteFilePath(logFileName);

                // ensure unique configuration of the log writer
                LogWriter existingWriterByFileName = writerByFileName.get(logFileName);
                if (existingWriterByFileName != null
                        && !existingWriterByFileName.getConfigurationPID().equals(pid)) {

                    // this file is already configured by another LOG_PID
                    throw new ConfigurationException(
                            LogConstants.LOG_FILE,
                            "LogFile " + logFileName + " already configured by configuration "
                                    + existingWriterByFileName.getConfigurationPID());
                }
            }

            // get number of files and ensure minimum and default
            Object fileNumProp = configuration.get(LogConstants.LOG_FILE_NUMBER);
            int fileNum = -1;
            if (fileNumProp instanceof Number) {
                fileNum = ((Number) fileNumProp).intValue();
            } else if (fileNumProp != null) {
                try {
                    fileNum = Integer.parseInt(fileNumProp.toString());
                } catch (NumberFormatException nfe) {
                    // don't care
                }
            }

            // get the log file size
            Object fileSizeProp = configuration.get(LogConstants.LOG_FILE_SIZE);
            String fileSize = null;
            if (fileSizeProp != null) {
                fileSize = fileSizeProp.toString();
            }

            boolean bufferedLogging = converter
                    .convert(configuration.get(LogConstants.LOG_FILE_BUFFERED))
                    .defaultValue(false)
                    .to(Boolean.TYPE);

            LogWriter newWriter =
                    new LogWriter(pid, getAppenderName(logFileName), fileNum, fileSize, logFileName, bufferedLogging);
            if (oldWriter != null) {
                writerByFileName.remove(oldWriter.getFileName());
            }

            writerByFileName.put(newWriter.getFileName(), newWriter);
            writerByPid.put(newWriter.getConfigurationPID(), newWriter);

        } else {
            final LogWriter logWriter = writerByPid.remove(pid);

            if (logWriter != null) {
                writerByFileName.remove(logWriter.getFileName());
            }
        }

        if (performRefresh) {
            configChanged();
        }
    }