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