private void buildAppenderLayout()

in log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java [288:372]


    private void buildAppenderLayout(final String name, final AppenderComponentBuilder appenderBuilder) {
        final String layoutClass = getLog4jAppenderValue(name, "layout", null);
        if (layoutClass != null) {
            switch (layoutClass) {
            case "org.apache.log4j.PatternLayout":
            case "org.apache.log4j.EnhancedPatternLayout": {
                String pattern = getLog4jAppenderValue(name, "layout.ConversionPattern", null);
                if (pattern != null) {
                    pattern = pattern
                            // Log4j 2 and Log4j 1 level names differ for custom levels
                            .replaceAll("%([-\\.\\d]*)p(?!\\w)", "%$1v1Level")
                            // Log4j 2's %x (NDC) is not compatible with Log4j 1's
                            // %x
                            // Log4j 1: "foo bar baz"
                            // Log4j 2: "[foo, bar, baz]"
                            // Use %ndc to get the Log4j 1 format
                            .replaceAll("%([-\\.\\d]*)x(?!\\w)", "%$1ndc")

                            // Log4j 2's %X (MDC) is not compatible with Log4j 1's
                            // %X
                            // Log4j 1: "{{foo,bar}{hoo,boo}}"
                            // Log4j 2: "{foo=bar,hoo=boo}"
                            // Use %properties to get the Log4j 1 format
                            .replaceAll("%([-\\.\\d]*)X(?!\\w)", "%$1properties");
                } else {
                    pattern = "%m%n";
                }
                appenderBuilder.add(newPatternLayout(pattern));
                break;
            }
            case "org.apache.log4j.SimpleLayout": {
                appenderBuilder.add(newPatternLayout("%v1Level - %m%n"));
                break;
            }
            case "org.apache.log4j.TTCCLayout": {
                String pattern = "";
                final String dateFormat = getLog4jAppenderValue(name, "layout.DateFormat", RELATIVE);
                final String timezone = getLog4jAppenderValue(name, "layout.TimeZone", null);
                if (dateFormat != null) {
                    if (RELATIVE.equalsIgnoreCase(dateFormat)) {
                        pattern += "%r ";
                    } else if (!NULL.equalsIgnoreCase(dateFormat)){
                        pattern += "%d{" + dateFormat + "}";
                        if (timezone != null) {
                            pattern += "{" + timezone + "}";
                        }
                        pattern += " ";
                    }
                }
                if (Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ThreadPrinting", TRUE))) {
                    pattern += "[%t] ";
                }
                pattern += "%p ";
                if (Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.CategoryPrefixing", TRUE))) {
                    pattern += "%c ";
                }
                if (Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.ContextPrinting", TRUE))) {
                    pattern += "%notEmpty{%ndc }";
                }
                pattern += "- %m%n";
                appenderBuilder.add(newPatternLayout(pattern));
                break;
            }
            case "org.apache.log4j.HTMLLayout": {
                final LayoutComponentBuilder htmlLayout = builder.newLayout("HtmlLayout");
                htmlLayout.addAttribute("title", getLog4jAppenderValue(name, "layout.Title", "Log4J Log Messages"));
                htmlLayout.addAttribute("locationInfo",
                        Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", FALSE)));
                appenderBuilder.add(htmlLayout);
                break;
            }
            case "org.apache.log4j.xml.XMLLayout": {
                final LayoutComponentBuilder xmlLayout = builder.newLayout("Log4j1XmlLayout");
                xmlLayout.addAttribute("locationInfo",
                        Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.LocationInfo", FALSE)));
                xmlLayout.addAttribute("properties",
                        Boolean.parseBoolean(getLog4jAppenderValue(name, "layout.Properties", FALSE)));
                appenderBuilder.add(xmlLayout);
                break;
            }
            default:
                reportWarning("Unknown layout class: " + layoutClass);
            }
        }
    }