private void buildAppenderLayout()

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


    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);
            }
        }
    }