public Appender parseAppender()

in log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/EnhancedRollingFileAppenderBuilder.java [102:182]


    public Appender parseAppender(final Element element, final XmlConfiguration configuration) {
        // FileAppender
        final String name = getNameAttribute(element);
        final AtomicReference<Layout> layout = new AtomicReference<>();
        final AtomicReference<Filter> filter = new AtomicReference<>();
        final AtomicReference<String> fileName = new AtomicReference<>();
        final AtomicReference<String> level = new AtomicReference<>();
        final AtomicBoolean immediateFlush = new AtomicBoolean(true);
        final AtomicBoolean append = new AtomicBoolean(true);
        final AtomicBoolean bufferedIo = new AtomicBoolean();
        final AtomicInteger bufferSize = new AtomicInteger(8192);
        // specific to RollingFileAppender
        final AtomicReference<String> rollingPolicyClassName = new AtomicReference<>();
        final AtomicReference<String> activeFileName = new AtomicReference<>();
        final AtomicReference<String> fileNamePattern = new AtomicReference<>();
        final AtomicInteger minIndex = new AtomicInteger(DEFAULT_MIN_INDEX);
        final AtomicInteger maxIndex = new AtomicInteger(DEFAULT_MAX_INDEX);
        final AtomicReference<TriggeringPolicy> triggeringPolicy = new AtomicReference<>();
        forEachElement(element.getChildNodes(), currentElement -> {
            switch (currentElement.getTagName()) {
                case ROLLING_TAG:
                    parseRollingPolicy(
                            currentElement,
                            configuration,
                            rollingPolicyClassName,
                            activeFileName,
                            fileNamePattern,
                            minIndex,
                            maxIndex);
                    break;
                case TRIGGERING_TAG:
                    triggeringPolicy.set(configuration.parseTriggeringPolicy(currentElement));
                    break;
                case LAYOUT_TAG:
                    layout.set(configuration.parseLayout(currentElement));
                    break;
                case FILTER_TAG:
                    configuration.addFilter(filter, currentElement);
                    break;
                case PARAM_TAG:
                    switch (getNameAttributeKey(currentElement)) {
                        case FILE_PARAM:
                            set(FILE_PARAM, currentElement, fileName);
                            break;
                        case APPEND_PARAM:
                            set(APPEND_PARAM, currentElement, append);
                            break;
                        case BUFFERED_IO_PARAM:
                            set(BUFFERED_IO_PARAM, currentElement, bufferedIo);
                            break;
                        case BUFFER_SIZE_PARAM:
                            set(BUFFER_SIZE_PARAM, currentElement, bufferSize);
                            break;
                        case THRESHOLD_PARAM:
                            set(THRESHOLD_PARAM, currentElement, level);
                            break;
                        case IMMEDIATE_FLUSH_PARAM:
                            set(IMMEDIATE_FLUSH_PARAM, currentElement, immediateFlush);
                            break;
                    }
                    break;
            }
        });
        return createAppender(
                name,
                layout.get(),
                filter.get(),
                fileName.get(),
                level.get(),
                immediateFlush.get(),
                append.get(),
                bufferedIo.get(),
                bufferSize.get(),
                rollingPolicyClassName.get(),
                activeFileName.get(),
                fileNamePattern.get(),
                minIndex.get(),
                maxIndex.get(),
                triggeringPolicy.get(),
                configuration);
    }