This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new 2203b63  Adds support for missing Log4j 1.x properties and fixes 
default values (#737)
2203b63 is described below

commit 2203b63389f1226e28677813b5ab1a16cd702586
Author: ppkarwasz <piotr.git...@karwasz.org>
AuthorDate: Fri Feb 4 22:06:55 2022 +0100

    Adds support for missing Log4j 1.x properties and fixes default values 
(#737)
    
    * Fixes default Log4j 1.x values
    
    The properties of the generated appenders are not always the same as it
    was in Log4j 1.x.
    
    * Fixes NoSuchFieldError
    
    Adapts `getAppendProperty` to different Java versions.
    
    * Fixes whitespace problems
---
 .../org/apache/log4j/builders/AbstractBuilder.java |   2 +
 .../builders/appender/ConsoleAppenderBuilder.java  |  29 +++-
 .../appender/DailyRollingFileAppenderBuilder.java  |  50 ++++--
 .../builders/appender/FileAppenderBuilder.java     |  23 ++-
 .../appender/RollingFileAppenderBuilder.java       |  48 ++++--
 .../log4j/builders/layout/HtmlLayoutBuilder.java   |   9 +-
 .../log4j/builders/layout/TTCCLayoutBuilder.java   |   2 +-
 .../log4j/config/Log4j1ConfigurationParser.java    |  28 ++-
 .../config/AbstractLog4j1ConfigurationTest.java    | 189 ++++++++++++++++++---
 .../config/Log4j1ConfigurationFactoryTest.java     |   5 +
 .../log4j/config/PropertiesConfigurationTest.java  |   8 +-
 .../apache/log4j/config/XmlConfigurationTest.java  |   6 +
 .../log4j-DailyRollingFileAppender.properties      |   6 +-
 .../config-1.2/log4j-DailyRollingFileAppender.xml  |   6 +-
 .../log4j-FileAppender-with-props.properties       |   6 +-
 ...log4j-RollingFileAppender-with-props.properties |   5 +-
 .../log4j-RollingFileAppender.properties           |   5 +-
 .../config-1.2/log4j-RollingFileAppender.xml       |   4 +
 .../log4j-console-EnhancedPatternLayout.properties |   1 +
 .../log4j-console-EnhancedPatternLayout.xml        |   1 +
 .../config-1.2/log4j-console-HtmlLayout.properties |   1 +
 .../config-1.2/log4j-console-HtmlLayout.xml        |   1 +
 .../log4j-console-PatternLayout.properties         |   1 +
 .../config-1.2/log4j-console-PatternLayout.xml     |   1 +
 .../log4j-console-SimpleLayout.properties          |   1 +
 .../config-1.2/log4j-console-SimpleLayout.xml      |   1 +
 .../config-1.2/log4j-console-TTCCLayout.properties |   6 +-
 .../config-1.2/log4j-console-TTCCLayout.xml        |   6 +-
 .../config-1.2/log4j-console-XmlLayout.properties  |   1 +
 .../config-1.2/log4j-defaultValues.properties      |  82 +++++++++
 .../resources/config-1.2/log4j-defaultValues.xml   |  66 +++++++
 .../config-1.2/log4j-file-SimpleLayout.properties  |   4 +
 .../config-1.2/log4j-file-SimpleLayout.xml         |   4 +
 .../log4j-system-properties-1.properties           |   6 +
 .../config-1.2/log4j-system-properties-1.xml       |   8 +-
 .../log4j-system-properties-2.properties           |   6 +
 36 files changed, 544 insertions(+), 84 deletions(-)

diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
index 9cd3a73..3442cc3 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/AbstractBuilder.java
@@ -47,9 +47,11 @@ public abstract class AbstractBuilder implements Builder {
     protected static final String APPEND_PARAM = "Append";
     protected static final String BUFFERED_IO_PARAM = "BufferedIO";
     protected static final String BUFFER_SIZE_PARAM = "BufferSize";
+    protected static final String IMMEDIATE_FLUSH_PARAM = "ImmediateFlush";
     protected static final String MAX_SIZE_PARAM = "MaxFileSize";
     protected static final String MAX_BACKUP_INDEX = "MaxBackupIndex";
     protected static final String RELATIVE = "RELATIVE";
+    protected static final String NULL = "NULL";
 
     private final String prefix;
     private final Properties properties;
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
index 491f3c1..f021f28 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
@@ -26,6 +26,7 @@ import static 
org.apache.log4j.xml.XmlConfiguration.forEachElement;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.log4j.Appender;
@@ -53,6 +54,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder 
implements AppenderB
     private static final String SYSTEM_OUT = "System.out";
     private static final String SYSTEM_ERR = "System.err";
     private static final String TARGET_PARAM = "Target";
+    private static final String FOLLOW_PARAM = "Follow";
 
     private static final Logger LOGGER = StatusLogger.getLogger();
 
@@ -70,6 +72,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder 
implements AppenderB
         AtomicReference<Layout> layout = new AtomicReference<>();
         AtomicReference<List<Filter>> filters = new AtomicReference<>(new 
ArrayList<>());
         AtomicReference<String> level = new AtomicReference<>();
+        AtomicBoolean follow = new AtomicBoolean(false);
         forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
@@ -107,6 +110,24 @@ public class ConsoleAppenderBuilder extends 
AbstractBuilder implements AppenderB
                             }
                             break;
                         }
+                        case FOLLOW_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for Follow 
parameter. Using default of {}", false);
+                            } else {
+                                follow.set(Boolean.valueOf(value));
+                            }
+                            break;
+                        }
+                        case IMMEDIATE_FLUSH_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for 
ImmediateFlush parameter. Using default of {}", true);
+                            } else if (!Boolean.getBoolean(name)) {
+                                LOGGER.warn("The value {} for ImmediateFlush 
parameter is not supported.", false);
+                            }
+                            break;
+                        }
                     }
                     break;
                 }
@@ -122,7 +143,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder 
implements AppenderB
             }
             current = f;
         }
-        return createAppender(name, layout.get(), head, level.get(), 
target.get(), config);
+        return createAppender(name, layout.get(), head, level.get(), 
target.get(), follow.get(), config);
     }
 
     @Override
@@ -132,11 +153,12 @@ public class ConsoleAppenderBuilder extends 
AbstractBuilder implements AppenderB
         Filter filter = configuration.parseAppenderFilters(props, 
filterPrefix, name);
         String level = getProperty(THRESHOLD_PARAM);
         String target = getProperty(TARGET_PARAM);
-        return createAppender(name, layout, filter, level, target, 
configuration);
+        boolean follow = getBooleanProperty(FOLLOW_PARAM, false);
+        return createAppender(name, layout, filter, level, target, follow, 
configuration);
     }
 
     private <T extends Log4j1Configuration> Appender createAppender(String 
name, Layout layout, Filter filter,
-            String level, String target, T configuration) {
+            String level, String target, boolean follow, T configuration) {
         org.apache.logging.log4j.core.Layout<?> consoleLayout = null;
 
         if (layout instanceof LayoutWrapper) {
@@ -150,6 +172,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder 
implements AppenderB
         return new AppenderWrapper(ConsoleAppender.newBuilder()
                 .setName(name)
                 .setTarget(consoleTarget)
+                .setFollow(follow)
                 .setLayout(consoleLayout)
                 .setFilter(consoleFilter)
                 .setConfiguration(configuration)
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
index e68c5a1..071d970 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
@@ -55,6 +55,9 @@ import org.w3c.dom.Element;
 @Plugin(name = "org.apache.log4j.DailyRollingFileAppender", category = 
CATEGORY)
 public class DailyRollingFileAppenderBuilder extends AbstractBuilder 
implements AppenderBuilder {
 
+    private static final String DEFAULT_DATE_PATTERN = ".yyyy-MM-dd";
+    private static final String DATE_PATTERN_PARAM = "DatePattern";
+
     private static final Logger LOGGER = StatusLogger.getLogger();
 
     public DailyRollingFileAppenderBuilder() {
@@ -71,10 +74,11 @@ public class DailyRollingFileAppenderBuilder extends 
AbstractBuilder implements
         AtomicReference<Filter> filter = new AtomicReference<>();
         AtomicReference<String> fileName = new AtomicReference<>();
         AtomicReference<String> level = new AtomicReference<>();
-        AtomicBoolean immediateFlush = new AtomicBoolean();
-        AtomicBoolean append = new AtomicBoolean();
-        AtomicBoolean bufferedIo = new AtomicBoolean();
+        AtomicBoolean immediateFlush = new AtomicBoolean(true);
+        AtomicBoolean append = new AtomicBoolean(true);
+        AtomicBoolean bufferedIo = new AtomicBoolean(false);
         AtomicInteger bufferSize = new AtomicInteger(8192);
+        AtomicReference<String> datePattern = new 
AtomicReference<String>(DEFAULT_DATE_PATTERN);
         forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
@@ -124,13 +128,31 @@ public class DailyRollingFileAppenderBuilder extends 
AbstractBuilder implements
                             }
                             break;
                         }
+                        case DATE_PATTERN_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for DatePattern 
parameter, ignoring.");
+                            } else {
+                                datePattern.set(value);
+                            }
+                            break;
+                        }
+                        case IMMEDIATE_FLUSH_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for 
ImmediateFlush parameter. Using default of {}", true);
+                            } else {
+                                immediateFlush.set(Boolean.getBoolean(value));
+                            }
+                            break;
+                        }
                     }
                     break;
                 }
             }
         });
         return createAppender(name, layout.get(), filter.get(), 
fileName.get(), append.get(), immediateFlush.get(),
-                level.get(), bufferedIo.get(), bufferSize.get(), config);
+                level.get(), bufferedIo.get(), bufferSize.get(), 
datePattern.get(), config);
     }
 
     @Override
@@ -140,21 +162,23 @@ public class DailyRollingFileAppenderBuilder extends 
AbstractBuilder implements
         Filter filter = configuration.parseAppenderFilters(props, 
filterPrefix, name);
         String fileName = getProperty(FILE_PARAM);
         String level = getProperty(THRESHOLD_PARAM);
-        boolean append = getBooleanProperty(APPEND_PARAM);
-        boolean immediateFlush = false;
-        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM);
-        int bufferSize = Integer.parseInt(getProperty(BUFFER_SIZE_PARAM, 
"8192"));
+        boolean append = getBooleanProperty(APPEND_PARAM, true);
+        boolean immediateFlush = getBooleanProperty(IMMEDIATE_FLUSH_PARAM, 
true);
+        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM, false);
+        int bufferSize = getIntegerProperty(BUFFER_SIZE_PARAM, 8192);
+        String datePattern = getProperty(DATE_PATTERN_PARAM, 
DEFAULT_DATE_PATTERN);
         return createAppender(name, layout, filter, fileName, append, 
immediateFlush,
-                level, bufferedIo, bufferSize, configuration);
+                level, bufferedIo, bufferSize, datePattern, configuration);
     }
 
     private <T extends Log4j1Configuration> Appender createAppender(final 
String name, final Layout layout,
             final Filter filter, final String fileName, final boolean append, 
boolean immediateFlush,
-            final String level, final boolean bufferedIo, final int 
bufferSize, final T configuration) {
+            final String level, final boolean bufferedIo, final int 
bufferSize, final String datePattern,
+            final T configuration) {
 
         org.apache.logging.log4j.core.Layout<?> fileLayout = null;
         if (bufferedIo) {
-            immediateFlush = true;
+            immediateFlush = false;
         }
         if (layout instanceof LayoutWrapper) {
             fileLayout = ((LayoutWrapper) layout).getLayout();
@@ -166,7 +190,7 @@ public class DailyRollingFileAppenderBuilder extends 
AbstractBuilder implements
             LOGGER.warn("Unable to create File Appender, no file name 
provided");
             return null;
         }
-        String filePattern = fileName + "%d{.yyyy-MM-dd}";
+        String filePattern = fileName + "%d{" + datePattern + "}";
         TriggeringPolicy timePolicy = 
TimeBasedTriggeringPolicy.newBuilder().withModulate(true).build();
         TriggeringPolicy policy = 
CompositeTriggeringPolicy.createPolicy(timePolicy);
         RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
@@ -179,6 +203,8 @@ public class DailyRollingFileAppenderBuilder extends 
AbstractBuilder implements
                 .setLayout(fileLayout)
                 .setFilter(fileFilter)
                 .withFileName(fileName)
+                .withAppend(append)
+                .withBufferedIo(bufferedIo)
                 .withBufferSize(bufferSize)
                 .withImmediateFlush(immediateFlush)
                 .withFilePattern(filePattern)
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
index 317eee1..cca775f 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
@@ -66,9 +66,9 @@ public class FileAppenderBuilder extends AbstractBuilder 
implements AppenderBuil
         AtomicReference<Filter> filter = new AtomicReference<>();
         AtomicReference<String> fileName = new AtomicReference<>();
         AtomicReference<String> level = new AtomicReference<>();
-        AtomicBoolean immediateFlush = new AtomicBoolean();
-        AtomicBoolean append = new AtomicBoolean();
-        AtomicBoolean bufferedIo = new AtomicBoolean();
+        AtomicBoolean immediateFlush = new AtomicBoolean(true);
+        AtomicBoolean append = new AtomicBoolean(true);
+        AtomicBoolean bufferedIo = new AtomicBoolean(false);
         AtomicInteger bufferSize = new AtomicInteger(8192);
         forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
@@ -119,6 +119,15 @@ public class FileAppenderBuilder extends AbstractBuilder 
implements AppenderBuil
                             }
                             break;
                         }
+                        case IMMEDIATE_FLUSH_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for 
ImmediateFlush parameter. Using default of {}", true);
+                            } else {
+                                immediateFlush.set(Boolean.getBoolean(value));
+                            }
+                            break;
+                        }
                     }
                     break;
                 }
@@ -136,9 +145,9 @@ public class FileAppenderBuilder extends AbstractBuilder 
implements AppenderBuil
         Filter filter = configuration.parseAppenderFilters(props, 
filterPrefix, name);
         String level = getProperty(THRESHOLD_PARAM);
         String fileName = getProperty(FILE_PARAM);
-        boolean append = getBooleanProperty(APPEND_PARAM);
-        boolean immediateFlush = false;
-        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM);
+        boolean append = getBooleanProperty(APPEND_PARAM, true);
+        boolean immediateFlush = getBooleanProperty(IMMEDIATE_FLUSH_PARAM, 
true);
+        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM, false);
         int bufferSize = Integer.parseInt(getProperty(BUFFER_SIZE_PARAM, 
"8192"));
         return createAppender(name, configuration, layout, filter, fileName, 
level, immediateFlush,
                 append, bufferedIo, bufferSize);
@@ -149,7 +158,7 @@ public class FileAppenderBuilder extends AbstractBuilder 
implements AppenderBuil
             final boolean bufferedIo, final int bufferSize) {
         org.apache.logging.log4j.core.Layout<?> fileLayout = null;
         if (bufferedIo) {
-            immediateFlush = true;
+            immediateFlush = false;
         }
         if (layout instanceof LayoutWrapper) {
             fileLayout = ((LayoutWrapper) layout).getLayout();
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
index f1dd914..c4d263f 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
@@ -54,6 +54,9 @@ import org.w3c.dom.Element;
 @Plugin(name = "org.apache.log4j.RollingFileAppender", category = CATEGORY)
 public class RollingFileAppenderBuilder extends AbstractBuilder implements 
AppenderBuilder {
 
+    private static final String DEFAULT_MAX_SIZE = "10 MB";
+    private static final String DEFAULT_MAX_BACKUPS = "1";
+
     private static final Logger LOGGER = StatusLogger.getLogger();
 
     public RollingFileAppenderBuilder() {
@@ -69,12 +72,12 @@ public class RollingFileAppenderBuilder extends 
AbstractBuilder implements Appen
         AtomicReference<Layout> layout = new AtomicReference<>();
         AtomicReference<Filter> filter = new AtomicReference<>();
         AtomicReference<String> fileName = new AtomicReference<>();
-        AtomicBoolean immediateFlush = new AtomicBoolean();
-        AtomicBoolean append = new AtomicBoolean();
-        AtomicBoolean bufferedIo = new AtomicBoolean();
+        AtomicBoolean immediateFlush = new AtomicBoolean(true);
+        AtomicBoolean append = new AtomicBoolean(true);
+        AtomicBoolean bufferedIo = new AtomicBoolean(false);
         AtomicInteger bufferSize = new AtomicInteger(8192);
-        AtomicReference<String> maxSize = new AtomicReference<>();
-        AtomicReference<String> maxBackups = new AtomicReference<>();
+        AtomicReference<String> maxSize = new 
AtomicReference<>(DEFAULT_MAX_SIZE);
+        AtomicReference<String> maxBackups = new 
AtomicReference<>(DEFAULT_MAX_BACKUPS);
         AtomicReference<String> level = new AtomicReference<>();
         forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
@@ -143,13 +146,22 @@ public class RollingFileAppenderBuilder extends 
AbstractBuilder implements Appen
                             }
                             break;
                         }
+                        case IMMEDIATE_FLUSH_PARAM: {
+                            String value = getValueAttribute(currentElement);
+                            if (value == null) {
+                                LOGGER.warn("No value supplied for 
ImmediateFlush parameter. Using default of {}", true);
+                            } else {
+                                immediateFlush.set(Boolean.getBoolean(value));
+                            }
+                            break;
+                        }
                     }
                     break;
                 }
             }
         });
-        return createAppender(name, config, layout.get(), filter.get(), 
bufferedIo.get(), immediateFlush.get(),
-                fileName.get(), level.get(), maxSize.get(), maxBackups.get());
+        return createAppender(name, config, layout.get(), filter.get(), 
append.get(), bufferedIo.get(),
+                bufferSize.get(), immediateFlush.get(), fileName.get(), 
level.get(), maxSize.get(), maxBackups.get());
     }
 
     @Override
@@ -159,20 +171,22 @@ public class RollingFileAppenderBuilder extends 
AbstractBuilder implements Appen
         Filter filter = configuration.parseAppenderFilters(props, 
filterPrefix, name);
         String fileName = getProperty(FILE_PARAM);
         String level = getProperty(THRESHOLD_PARAM);
-        boolean immediateFlush = false;
-        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM);
-        String maxSize = getProperty(MAX_SIZE_PARAM);
-        String maxBackups = getProperty(MAX_BACKUP_INDEX);
-        return createAppender(name, configuration, layout, filter, bufferedIo, 
immediateFlush, fileName, level, maxSize,
-                maxBackups);
+        boolean append = getBooleanProperty(APPEND_PARAM, true);
+        boolean immediateFlush = getBooleanProperty(IMMEDIATE_FLUSH_PARAM, 
true);
+        boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM, false);
+        int bufferSize = getIntegerProperty(BUFFER_SIZE_PARAM, 8192);
+        String maxSize = getProperty(MAX_SIZE_PARAM, DEFAULT_MAX_SIZE);
+        String maxBackups = getProperty(MAX_BACKUP_INDEX, DEFAULT_MAX_BACKUPS);
+        return createAppender(name, configuration, layout, filter, append, 
bufferedIo, bufferSize, immediateFlush,
+                fileName, level, maxSize, maxBackups);
     }
 
     private Appender createAppender(final String name, final 
Log4j1Configuration config, final Layout layout,
-            final Filter filter, final boolean bufferedIo, boolean 
immediateFlush, final String fileName,
-            final String level, final String maxSize, final String maxBackups) 
{
+            final Filter filter, final boolean append, final boolean 
bufferedIo, int bufferSize, boolean immediateFlush,
+            final String fileName, final String level, final String maxSize, 
final String maxBackups) {
         org.apache.logging.log4j.core.Layout<?> fileLayout = null;
         if (!bufferedIo) {
-            immediateFlush = true;
+            immediateFlush = false;
         }
         if (layout instanceof LayoutWrapper) {
             fileLayout = ((LayoutWrapper) layout).getLayout();
@@ -196,7 +210,9 @@ public class RollingFileAppenderBuilder extends 
AbstractBuilder implements Appen
                 .setConfiguration(config)
                 .setLayout(fileLayout)
                 .setFilter(fileFilter)
+                .withAppend(append)
                 .withBufferedIo(bufferedIo)
+                .withBufferSize(bufferSize)
                 .withImmediateFlush(immediateFlush)
                 .withFileName(fileName)
                 .withFilePattern(filePattern)
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
index dd3a2d1..dfe0df8 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
@@ -39,6 +39,7 @@ import org.w3c.dom.Element;
 @Plugin(name = "org.apache.log4j.HTMLLayout", category = CATEGORY)
 public class HtmlLayoutBuilder extends AbstractBuilder implements 
LayoutBuilder {
 
+    private static final String DEFAULT_TITLE = "Log4J Log Messages";
     private static final String TITLE_PARAM = "Title";
     private static final String LOCATION_INFO_PARAM = "LocationInfo";
 
@@ -52,8 +53,8 @@ public class HtmlLayoutBuilder extends AbstractBuilder 
implements LayoutBuilder
 
     @Override
     public Layout parseLayout(Element layoutElement, XmlConfiguration config) {
-        final AtomicReference<String> title = new AtomicReference<>();
-        final AtomicBoolean locationInfo = new AtomicBoolean();
+        final AtomicReference<String> title = new AtomicReference<>("Log4J Log 
Messages");
+        final AtomicBoolean locationInfo = new AtomicBoolean(false);
         forEachElement(layoutElement.getElementsByTagName("param"), 
currentElement -> {
             if (currentElement.getTagName().equals(PARAM_TAG)) {
                 if 
(TITLE_PARAM.equalsIgnoreCase(currentElement.getAttribute("name"))) {
@@ -68,8 +69,8 @@ public class HtmlLayoutBuilder extends AbstractBuilder 
implements LayoutBuilder
 
     @Override
     public Layout parseLayout(PropertiesConfiguration config) {
-        String title = getProperty(TITLE_PARAM);
-        boolean locationInfo = getBooleanProperty(LOCATION_INFO_PARAM);
+        String title = getProperty(TITLE_PARAM, DEFAULT_TITLE);
+        boolean locationInfo = getBooleanProperty(LOCATION_INFO_PARAM, false);
         return createLayout(title, locationInfo);
     }
 
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
index dc4033d..e6f9718 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
@@ -103,7 +103,7 @@ public class TTCCLayoutBuilder extends AbstractBuilder 
implements LayoutBuilder
         if (dateFormat != null) {
             if (RELATIVE.equalsIgnoreCase(dateFormat)) {
                 sb.append("%r ");
-            } else {
+            } else if (!NULL.equalsIgnoreCase(dateFormat)){
                 sb.append("%d{").append(dateFormat).append("}");
                 if (timezone != null) {
                     sb.append("{").append(timezone).append("}");
diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
 
b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
index 2007bbd..8120d9b 100644
--- 
a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
+++ 
b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java
@@ -66,6 +66,8 @@ public class Log4j1ConfigurationParser {
     private static final String ROOTCATEGORY = "rootCategory";
     private static final String TRUE = "true";
     private static final String FALSE = "false";
+    private static final String RELATIVE = "RELATIVE";
+    private static final String NULL = "NULL";
 
     private final Properties properties = new Properties();
 
@@ -226,7 +228,7 @@ public class Log4j1ConfigurationParser {
                 RollingFileAppender.PLUGIN_NAME);
         buildFileAppender(appenderName, appenderBuilder);
         final String fileName = getLog4jAppenderValue(appenderName, "File");
-        final String datePattern = getLog4jAppenderValue(appenderName, 
"DatePattern", fileName + "'.'yyyy-MM-dd");
+        final String datePattern = getLog4jAppenderValue(appenderName, 
"DatePattern", ".yyyy-MM-dd");
         appenderBuilder.addAttribute("filePattern", fileName + "%d{" + 
datePattern + "}");
         final ComponentBuilder<?> triggeringPolicy = 
builder.newComponent("Policies")
                 
.addComponent(builder.newComponent("TimeBasedTriggeringPolicy").addAttribute("modulate",
 true));
@@ -287,8 +289,9 @@ public class Log4j1ConfigurationParser {
             switch (layoutClass) {
             case "org.apache.log4j.PatternLayout":
             case "org.apache.log4j.EnhancedPatternLayout": {
-                final String pattern = getLog4jAppenderValue(name, 
"layout.ConversionPattern", null)
-
+                String pattern = getLog4jAppenderValue(name, 
"layout.ConversionPattern", null);
+                if (pattern != null) {
+                    pattern = pattern
                         // Log4j 2's %x (NDC) is not compatible with Log4j 1's
                         // %x
                         // Log4j 1: "foo bar baz"
@@ -302,7 +305,9 @@ public class Log4j1ConfigurationParser {
                         // Log4j 2: "{foo=bar,hoo=boo}"
                         // Use %properties to get the Log4j 1 format
                         .replace("%X", "%properties");
-
+                } else {
+                    pattern = "%m%n";
+                }
                 appenderBuilder.add(newPatternLayout(pattern));
                 break;
             }
@@ -311,7 +316,20 @@ public class Log4j1ConfigurationParser {
                 break;
             }
             case "org.apache.log4j.TTCCLayout": {
-                String pattern = "%r ";
+                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] ";
                 }
diff --git 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationTest.java
 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationTest.java
index 98e1931..9660a8d 100644
--- 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationTest.java
+++ 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/AbstractLog4j1ConfigurationTest.java
@@ -21,7 +21,12 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.net.URISyntaxException;
 import java.nio.file.FileSystemException;
 import java.nio.file.Files;
@@ -35,6 +40,7 @@ import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.appender.ConsoleAppender.Target;
 import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.appender.NullAppender;
+import org.apache.logging.log4j.core.appender.OutputStreamManager;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import 
org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy;
@@ -46,7 +52,7 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.LoggerConfig;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.junit.Test;
+import org.apache.logging.log4j.core.util.CloseShieldOutputStream;
 
 public abstract class AbstractLog4j1ConfigurationTest {
 
@@ -82,11 +88,13 @@ public abstract class AbstractLog4j1ConfigurationTest {
         final String name = "Console";
         final ConsoleAppender appender = configuration.getAppender(name);
         assertNotNull("Missing appender '" + name + "' in configuration " + 
configResource + " → " + configuration, appender);
+        assertEquals("follow", true, getFollowProperty(appender));
         assertEquals(Target.SYSTEM_ERR, appender.getTarget());
         //
         final LoggerConfig loggerConfig = 
configuration.getLoggerConfig("com.example.foo");
         assertNotNull(loggerConfig);
         assertEquals(Level.DEBUG, loggerConfig.getLevel());
+        // immediateFlush is always true in Log4j 2.x
         configuration.start();
         configuration.stop();
         return appender.getLayout();
@@ -94,7 +102,7 @@ public abstract class AbstractLog4j1ConfigurationTest {
 
     public void testConsoleTtccLayout() throws Exception {
         final PatternLayout layout = (PatternLayout) 
testConsole("config-1.2/log4j-console-TTCCLayout");
-        assertEquals("%r [%t] %p %notEmpty{%ndc }- %m%n", 
layout.getConversionPattern());
+        assertEquals("%d{ISO8601}{CET} %p - %m%n", 
layout.getConversionPattern());
     }
 
     public void testRollingFileAppender() throws Exception {
@@ -102,7 +110,7 @@ public abstract class AbstractLog4j1ConfigurationTest {
     }
 
     public void testDailyRollingFileAppender() throws Exception {
-        
testDailyRollingFileAppender("config-1.2/log4j-DailyRollingFileAppender", 
"DRFA", "target/hadoop.log%d{.yyyy-MM-dd}");
+        
testDailyRollingFileAppender("config-1.2/log4j-DailyRollingFileAppender", 
"DRFA", "target/hadoop.log%d{.dd-MM-yyyy}");
     }
 
     public void testRollingFileAppenderWithProperties() throws Exception {
@@ -113,14 +121,28 @@ public abstract class AbstractLog4j1ConfigurationTest {
         final String tempFileName = System.getProperty("java.io.tmpdir") + 
"/hadoop.log";
         final Path tempFilePath = new File(tempFileName).toPath();
         Files.deleteIfExists(tempFilePath);
+        final Configuration configuration = 
getConfiguration("config-1.2/log4j-system-properties-1");
         try {
-            final Configuration configuration = 
getConfiguration("config-1.2/log4j-system-properties-1");
             final RollingFileAppender appender = 
configuration.getAppender("RFA");
+            assertEquals("append", false, getAppendProperty(appender));
+            assertEquals("bufferSize", 1000, 
appender.getManager().getBufferSize());
+            assertEquals("immediateFlush", false, 
appender.getImmediateFlush());
+            final DefaultRolloverStrategy rolloverStrategy = 
(DefaultRolloverStrategy) appender.getManager().getRolloverStrategy();
+            assertEquals(16, rolloverStrategy.getMaxIndex());
+            final CompositeTriggeringPolicy ctp = (CompositeTriggeringPolicy) 
appender.getTriggeringPolicy();
+            final TriggeringPolicy[] triggeringPolicies = 
ctp.getTriggeringPolicies();
+            assertEquals(1, triggeringPolicies.length);
+            final TriggeringPolicy tp = triggeringPolicies[0];
+            assertTrue(tp.getClass().getName(), tp instanceof 
SizeBasedTriggeringPolicy);
+            final SizeBasedTriggeringPolicy sbtp = (SizeBasedTriggeringPolicy) 
tp;
+            assertEquals(20 * 1024 * 1024, sbtp.getMaxFileSize());
             appender.stop(10, TimeUnit.SECONDS);
             // System.out.println("expected: " + tempFileName + " Actual: " +
             // appender.getFileName());
             assertEquals(tempFileName, appender.getFileName());
         } finally {
+            configuration.start();
+            configuration.stop();
             try {
                 Files.deleteIfExists(tempFilePath);
             } catch (final FileSystemException e) {
@@ -154,6 +176,9 @@ public abstract class AbstractLog4j1ConfigurationTest {
         assertEquals(name, appender.getName());
         assertTrue(appender.getClass().getName(), appender instanceof 
RollingFileAppender);
         final RollingFileAppender rfa = (RollingFileAppender) appender;
+        assertEquals("append", false, getAppendProperty(rfa));
+        assertEquals("bufferSize", 1000, rfa.getManager().getBufferSize());
+        assertEquals("immediateFlush", false, rfa.getImmediateFlush());
         assertEquals("target/hadoop.log", rfa.getFileName());
         assertEquals(filePattern, rfa.getFilePattern());
         final TriggeringPolicy triggeringPolicy = rfa.getTriggeringPolicy();
@@ -177,29 +202,35 @@ public abstract class AbstractLog4j1ConfigurationTest {
     private void testDailyRollingFileAppender(final String configResource, 
final String name, final String filePattern)
             throws Exception {
         final Configuration configuration = getConfiguration(configResource);
-        final Appender appender = configuration.getAppender(name);
-        assertNotNull(appender);
-        assertEquals(name, appender.getName());
-        assertTrue(appender.getClass().getName(), appender instanceof 
RollingFileAppender);
-        final RollingFileAppender rfa = (RollingFileAppender) appender;
-        assertEquals("target/hadoop.log", rfa.getFileName());
-        assertEquals(filePattern, rfa.getFilePattern());
-        final TriggeringPolicy triggeringPolicy = rfa.getTriggeringPolicy();
-        assertNotNull(triggeringPolicy);
-        assertTrue(triggeringPolicy.getClass().getName(), triggeringPolicy 
instanceof CompositeTriggeringPolicy);
-        final CompositeTriggeringPolicy ctp = (CompositeTriggeringPolicy) 
triggeringPolicy;
-        final TriggeringPolicy[] triggeringPolicies = 
ctp.getTriggeringPolicies();
-        assertEquals(1, triggeringPolicies.length);
-        final TriggeringPolicy tp = triggeringPolicies[0];
-        assertTrue(tp.getClass().getName(), tp instanceof 
TimeBasedTriggeringPolicy);
-        final TimeBasedTriggeringPolicy tbtp = (TimeBasedTriggeringPolicy) tp;
-        assertEquals(1, tbtp.getInterval());
-        final RolloverStrategy rolloverStrategy = 
rfa.getManager().getRolloverStrategy();
-        assertTrue(rolloverStrategy.getClass().getName(), rolloverStrategy 
instanceof DefaultRolloverStrategy);
-        final DefaultRolloverStrategy drs = (DefaultRolloverStrategy) 
rolloverStrategy;
-        assertEquals(Integer.MAX_VALUE, drs.getMaxIndex());
-        configuration.start();
-        configuration.stop();
+        try {
+            final Appender appender = configuration.getAppender(name);
+            assertNotNull(appender);
+            assertEquals(name, appender.getName());
+            assertTrue(appender.getClass().getName(), appender instanceof 
RollingFileAppender);
+            final RollingFileAppender rfa = (RollingFileAppender) appender;
+            assertEquals("append", false, getAppendProperty(rfa));
+            assertEquals("bufferSize", 1000, rfa.getManager().getBufferSize());
+            assertEquals("immediateFlush", false, rfa.getImmediateFlush());
+            assertEquals("target/hadoop.log", rfa.getFileName());
+            assertEquals(filePattern, rfa.getFilePattern());
+            final TriggeringPolicy triggeringPolicy = 
rfa.getTriggeringPolicy();
+            assertNotNull(triggeringPolicy);
+            assertTrue(triggeringPolicy.getClass().getName(), triggeringPolicy 
instanceof CompositeTriggeringPolicy);
+            final CompositeTriggeringPolicy ctp = (CompositeTriggeringPolicy) 
triggeringPolicy;
+            final TriggeringPolicy[] triggeringPolicies = 
ctp.getTriggeringPolicies();
+            assertEquals(1, triggeringPolicies.length);
+            final TriggeringPolicy tp = triggeringPolicies[0];
+            assertTrue(tp.getClass().getName(), tp instanceof 
TimeBasedTriggeringPolicy);
+            final TimeBasedTriggeringPolicy tbtp = (TimeBasedTriggeringPolicy) 
tp;
+            assertEquals(1, tbtp.getInterval());
+            final RolloverStrategy rolloverStrategy = 
rfa.getManager().getRolloverStrategy();
+            assertTrue(rolloverStrategy.getClass().getName(), rolloverStrategy 
instanceof DefaultRolloverStrategy);
+            final DefaultRolloverStrategy drs = (DefaultRolloverStrategy) 
rolloverStrategy;
+            assertEquals(Integer.MAX_VALUE, drs.getMaxIndex());
+        } finally {
+            configuration.start();
+            configuration.stop();
+        }
     }
 
     private Layout<?> testFile(final String configResource) throws Exception {
@@ -211,6 +242,9 @@ public abstract class AbstractLog4j1ConfigurationTest {
         final LoggerConfig loggerConfig = 
configuration.getLoggerConfig("com.example.foo");
         assertNotNull(loggerConfig);
         assertEquals(Level.DEBUG, loggerConfig.getLevel());
+        assertEquals("append", false, getAppendProperty(appender));
+        assertEquals("bufferSize", 1000, 
appender.getManager().getBufferSize());
+        assertEquals("immediateFlush", false, appender.getImmediateFlush());
         configuration.start();
         configuration.stop();
         return appender.getLayout();
@@ -250,4 +284,105 @@ public abstract class AbstractLog4j1ConfigurationTest {
         assertTrue(appender.getClass().getName(), appender instanceof 
NullAppender);
     }
 
+    private boolean getFollowProperty(final ConsoleAppender consoleAppender)
+            throws Exception, NoSuchFieldException, IllegalAccessException {
+        CloseShieldOutputStream wrapperStream = (CloseShieldOutputStream) 
getOutputStream(consoleAppender.getManager());
+        Field delegateField = 
CloseShieldOutputStream.class.getDeclaredField("delegate");
+        delegateField.setAccessible(true);
+        boolean follow = !System.out.equals(delegateField.get(wrapperStream));
+        return follow;
+    }
+
+    private boolean getAppendProperty(final RollingFileAppender appender) 
throws Exception {
+        return getAppendProperty((FileOutputStream) 
getOutputStream(appender.getManager()));
+    }
+
+    private boolean getAppendProperty(final FileAppender appender) throws 
Exception {
+        return getAppendProperty((FileOutputStream) 
getOutputStream(appender.getManager()));
+    }
+
+    private boolean getAppendProperty(final FileOutputStream os) throws 
Exception {
+        // Java 8
+        try {
+            final Field appendField = 
FileOutputStream.class.getDeclaredField("append");
+            appendField.setAccessible(true);
+            return (Boolean) appendField.get(os);
+        } catch (NoSuchFieldError e) {
+            // Java 11
+            final Field appendField = 
FileDescriptor.class.getDeclaredField("append");
+            appendField.setAccessible(true);
+            return (Boolean) appendField.get(os.getFD());
+        }
+    }
+
+    private OutputStream getOutputStream(final OutputStreamManager manager) 
throws Exception {
+        final Method getOutputStream = 
OutputStreamManager.class.getDeclaredMethod("getOutputStream");
+        getOutputStream.setAccessible(true);
+        return (OutputStream) getOutputStream.invoke(manager);
+    }
+
+    private Layout<?> testLayout(final Configuration config, final String 
appenderName) throws Exception {
+        final ConsoleAppender appender = config.getAppender(appenderName);
+        assertNotNull("Missing appender '" + appenderName + "' in 
configuration " + config.getConfigurationSource(), appender);
+        return appender.getLayout();
+    }
+
+    /**
+     * Test if the default values from Log4j 1.x are respected.
+     */
+    public void testDefaultValues() throws Exception {
+        final Configuration config = 
getConfiguration("config-1.2/log4j-defaultValues");
+        // HtmlLayout
+        final HtmlLayout htmlLayout = (HtmlLayout) testLayout(config, 
"HTMLLayout");
+        assertNotNull(htmlLayout);
+        assertEquals("title", "Log4J Log Messages", htmlLayout.getTitle());
+        assertEquals("locationInfo", false, htmlLayout.isLocationInfo());
+        // PatternLayout
+        final PatternLayout patternLayout = (PatternLayout) testLayout(config, 
"PatternLayout");
+        assertNotNull(patternLayout);
+        assertEquals("conversionPattern", "%m%n", 
patternLayout.getConversionPattern());
+        // TTCCLayout
+        final PatternLayout ttccLayout = (PatternLayout) testLayout(config, 
"TTCCLayout");
+        assertNotNull(ttccLayout);
+        assertEquals("equivalent conversion pattern", "%r [%t] %p %c 
%notEmpty{%ndc }- %m%n", ttccLayout.getConversionPattern());
+        // TODO: XMLLayout
+        // final XmlLayout xmlLayout = (XmlLayout) testLayout(config, 
"XMLLayout");
+        // assertNotNull(xmlLayout);
+        // ConsoleAppender
+        final ConsoleAppender consoleAppender = 
config.getAppender("ConsoleAppender");
+        assertNotNull(consoleAppender);
+        assertEquals("target", Target.SYSTEM_OUT, consoleAppender.getTarget());
+        boolean follow = getFollowProperty(consoleAppender);
+        assertEquals("follow", false, follow);
+        // DailyRollingFileAppender
+        final RollingFileAppender dailyRollingFileAppender = 
config.getAppender("DailyRollingFileAppender");
+        assertNotNull(dailyRollingFileAppender);
+        assertEquals("equivalent file pattern", 
"target/dailyRollingFileAppender%d{.yyyy-MM-dd}",
+                dailyRollingFileAppender.getFilePattern());
+        assertEquals("append", true, 
getAppendProperty(dailyRollingFileAppender));
+        assertEquals("bufferSize", 8192, 
dailyRollingFileAppender.getManager().getBufferSize());
+        assertEquals("immediateFlush", true, 
dailyRollingFileAppender.getImmediateFlush());
+        // FileAppender
+        final FileAppender fileAppender = config.getAppender("FileAppender");
+        assertNotNull(fileAppender);
+        assertEquals("append", true, getAppendProperty(fileAppender));
+        assertEquals("bufferSize", 8192, 
fileAppender.getManager().getBufferSize());
+        assertEquals("immediateFlush", true, fileAppender.getImmediateFlush());
+        // RollingFileAppender
+        final RollingFileAppender rollingFileAppender = 
config.getAppender("RollingFileAppender");
+        assertNotNull(rollingFileAppender);
+        assertEquals("equivalent file pattern", 
"target/rollingFileAppender.%i", rollingFileAppender.getFilePattern());
+        final CompositeTriggeringPolicy compositePolicy = 
rollingFileAppender.getManager().getTriggeringPolicy();
+        assertEquals(1, compositePolicy.getTriggeringPolicies().length);
+        final SizeBasedTriggeringPolicy sizePolicy = 
(SizeBasedTriggeringPolicy) compositePolicy.getTriggeringPolicies()[0];
+        assertEquals("maxFileSize", 10 * 1024 * 1024L, 
sizePolicy.getMaxFileSize());
+        final DefaultRolloverStrategy strategy = (DefaultRolloverStrategy) 
rollingFileAppender.getManager()
+                .getRolloverStrategy();
+        assertEquals("maxBackupIndex", 1, strategy.getMaxIndex());
+        assertEquals("append", true, getAppendProperty(rollingFileAppender));
+        assertEquals("bufferSize", 8192, 
rollingFileAppender.getManager().getBufferSize());
+        assertEquals("immediateFlush", true, 
rollingFileAppender.getImmediateFlush());
+        config.start();
+        config.stop();
+    }
 }
diff --git 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
index a1a3bba..e30f46a 100644
--- 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
+++ 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/Log4j1ConfigurationFactoryTest.java
@@ -148,4 +148,9 @@ public class Log4j1ConfigurationFactoryTest extends 
AbstractLog4j1ConfigurationT
         super.testConsoleCapitalization();
     }
 
+    @Override
+    @Test
+    public void testDefaultValues() throws Exception {
+        super.testDefaultValues();
+    }
 }
diff --git 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
index c00aa9c..ad8b8d1 100644
--- 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
+++ 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
@@ -261,4 +261,10 @@ public class PropertiesConfigurationTest extends 
AbstractLog4j1ConfigurationTest
     public void testSystemProperties2() throws Exception {
         super.testSystemProperties2();
     }
-}
\ No newline at end of file
+
+    @Override
+    @Test
+    public void testDefaultValues() throws Exception {
+        super.testDefaultValues();
+    }
+}
diff --git 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
index 3193008..d5d07cf 100644
--- 
a/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
+++ 
b/log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlConfigurationTest.java
@@ -160,4 +160,10 @@ public class XmlConfigurationTest extends 
AbstractLog4j1ConfigurationTest {
         super.testSystemProperties1();
     }
 
+    @Override
+    @Test
+    public void testDefaultValues() throws Exception {
+        super.testDefaultValues();
+    }
+
 }
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
index 1ee8ca2..0af97ae 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.properties
@@ -30,10 +30,14 @@ log4j.rootLogger=TRACE, DRFA
 #
 
 log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.Append=false
+log4j.appender.DRFA.BufferedIO=true
+log4j.appender.DRFA.BufferSize=1000
 log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+log4j.appender.DRFA.ImmediateFlush=false
 
 # Rollover at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+log4j.appender.DRFA.DatePattern=.dd-MM-yyyy
 
 log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.xml
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.xml
index fbec94f..9076d32 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.xml
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-DailyRollingFileAppender.xml
@@ -18,8 +18,12 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="DRFA" class="org.apache.log4j.DailyRollingFileAppender">
+    <param name="Append" value="false" />
+    <param name="BufferedIO" value="true" />
+    <param name="BufferSize" value="1000" />
+    <param name="DatePattern" value=".dd-MM-yyyy" />
     <param name="File" value="target/hadoop.log" />
-    <param name="DatePattern" value=".yyyy-MM-dd" />
+    <param name="ImmediateFlush" value="false" />
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{ISO8601} %p %c: %m%n" />
     </layout>
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-FileAppender-with-props.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-FileAppender-with-props.properties
index 2712efc..e503ae1 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-FileAppender-with-props.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-FileAppender-with-props.properties
@@ -30,7 +30,11 @@ log4j.rootLogger=TRACE, FILE_APPENDER
 hadoop.log.maxfilesize=256MB
 hadoop.log.maxbackupindex=20
 log4j.appender.FILE_APPENDER=org.apache.log4j.FileAppender
-log4j.appender.FILE_APPENDER.file=${log4j.test.tmpdir}/${hadoop.log.file}
+log4j.appender.FILE_APPENDER.Append=false
+log4j.appender.FILE_APPENDER.BufferedIO=true
+log4j.appender.FILE_APPENDER.BufferSize=1000
+log4j.appender.FILE_APPENDER.File=${log4j.test.tmpdir}/${hadoop.log.file}
+log4j.appender.FILE_APPENDER.ImmediateFlush=false
 log4j.appender.FILE_APPENDER.layout=org.apache.log4j.PatternLayout
 
 # Pattern format: Date LogLevel LoggerName LogMessage
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender-with-props.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender-with-props.properties
index 9cb6ea9..fd6c645 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender-with-props.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender-with-props.properties
@@ -31,8 +31,11 @@ log4j.rootLogger=TRACE, RFA
 hadoop.log.maxfilesize=256MB
 hadoop.log.maxbackupindex=20
 log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+log4j.appender.RFA.Append=false
+log4j.appender.RFA.BufferedIO=true
+log4j.appender.RFA.BufferSize=1000
 log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
-
+log4j.appender.RFA.ImmediateFlush=false
 log4j.appender.RFA.MaxFileSize=${hadoop.log.maxfilesize}
 log4j.appender.RFA.MaxBackupIndex=${hadoop.log.maxbackupindex}
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.properties
index cb848cf..310471a 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.properties
@@ -26,8 +26,11 @@ log4j.rootLogger=TRACE, RFA
 # Rolling File Appender - cap space usage at 5gb.
 #
 log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+log4j.appender.RFA.Append=false
+log4j.appender.RFA.BufferedIO=true
+log4j.appender.RFA.BufferSize=1000
 log4j.appender.RFA.File=target/hadoop.log
-
+log4j.appender.RFA.ImmediateFlush=false
 log4j.appender.RFA.MaxFileSize=256MB
 log4j.appender.RFA.MaxBackupIndex=20
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.xml
index 5a20064..1ad1d4b 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-RollingFileAppender.xml
@@ -18,7 +18,11 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="RFA" class="org.apache.log4j.RollingFileAppender">
+    <param name="Append" value="false" />
+    <param name="BufferedIO" value="true" />
+    <param name="BufferSize" value="1000" />
     <param name="File" value="target/hadoop.log" />
+    <param name="ImmediateFlush" value="false" />
     <param name="MaxFileSize" value="256MB" />
     <param name="MaxBackupIndex" value="20" />
     <layout class="org.apache.log4j.PatternLayout">
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
index b40bbd3..ba1197c 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.properties
@@ -28,6 +28,7 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.EnhancedPatternLayout
 log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} [%t][%c] %-5p %X 
%x: %m%n
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.xml
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.xml
index aab4074..3e1b2a0 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.xml
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-EnhancedPatternLayout.xml
@@ -18,6 +18,7 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
+    <param name="Follow" value="true" />
     <param name="Target" value="System.err" />
     <layout class="org.apache.log4j.EnhancedPatternLayout">
       <param name="ConversionPattern" value="%d{ISO8601} [%t][%c] %-5p %X %x: 
%m%n" />
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
index a3b618d..ac94b1d 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.properties
@@ -28,6 +28,7 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.HTMLLayout
 log4j.appender.Console.layout.Title=Headline
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.xml
index 6c2ae53..f03131d 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-HtmlLayout.xml
@@ -18,6 +18,7 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
+    <param name="Follow" value="true" />
     <param name="Target" value="System.err" />
     <layout class="org.apache.log4j.HTMLLayout">
       <param name="Title" value="Headline" />
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
index d651cd7..679afd3 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.properties
@@ -28,6 +28,7 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.PatternLayout
 log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} [%t][%c] %-5p: %m%n
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.xml
index cbe264a..65ae57f 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.xml
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-PatternLayout.xml
@@ -18,6 +18,7 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
+    <param name="Follow" value="true" />
     <param name="Target" value="System.err" />
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d{ISO8601} [%t][%c] %-5p: %m%n" 
/>
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
index 4133b5a..42f29d3 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.properties
@@ -28,6 +28,7 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.SimpleLayout
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.xml
index b38d8f5..30263bf 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-SimpleLayout.xml
@@ -18,6 +18,7 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
+    <param name="Follow" value="true" />
     <param name="Target" value="System.err" />
     <layout class="org.apache.log4j.SimpleLayout" />
   </appender>
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
index f3810f2..01cc0b0 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.properties
@@ -28,9 +28,13 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.TTCCLayout
-log4j.appender.Console.layout.ThreadPrinting=true
+log4j.appender.Console.layout.ThreadPrinting=false
 log4j.appender.Console.layout.CategoryPrefixing=false
+log4j.appender.Console.layout.ContextPrinting=false
+log4j.appender.Console.layout.DateFormat=ISO8601
+log4j.appender.Console.layout.TimeZone=CET
 
 log4j.logger.com.example.foo = DEBUG
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.xml
index 0de8052..b0900da 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-TTCCLayout.xml
@@ -18,10 +18,14 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
+    <param name="Follow" value="true" />
     <param name="Target" value="System.err" />
     <layout class="org.apache.log4j.TTCCLayout">
-      <param name="ThreadPrinting" value="true" />
+      <param name="ThreadPrinting" value="false" />
       <param name="CategoryPrefixing" value="false" />
+      <param name="ContextPrinting" value="false" />
+      <param name="DateFormat" value="ISO8601" />
+      <param name="TimeZone" value="CET" />
     </layout>
   </appender>
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
index a4c2bf5..f8a22af 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-console-XmlLayout.properties
@@ -28,6 +28,7 @@ log4j.rootLogger=TRACE, Console
 #
 
 log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Follow=true
 log4j.appender.Console.Target=System.err
 log4j.appender.Console.layout=org.apache.log4j.xml.XMLLayout
 log4j.appender.Console.layout.LocationInfo=true
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.properties 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.properties
new file mode 100644
index 0000000..15627a4
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.properties
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Configuration file with minimal number of non-default values
+#
+log4j.rootLogger = TRACE, HTMLLayout, PatternLayout, TTCCLayout, XMLLayout,\
+ConsoleAppender, DailyRollingFileAppender, FileAppender, RollingFileAppender
+
+##############################################################################
+#
+# HTMLLayout
+#
+log4j.appender.HTMLLayout=org.apache.log4j.ConsoleAppender
+log4j.appender.HTMLLayout.layout=org.apache.log4j.HTMLLayout
+
+##############################################################################
+#
+# PatternLayout
+#
+log4j.appender.PatternLayout=org.apache.log4j.ConsoleAppender
+log4j.appender.PatternLayout.layout=org.apache.log4j.PatternLayout
+
+##############################################################################
+#
+# TTCCLayout
+#
+log4j.appender.TTCCLayout=org.apache.log4j.ConsoleAppender
+log4j.appender.TTCCLayout.layout=org.apache.log4j.TTCCLayout
+
+##############################################################################
+#
+# XMLLayout
+#
+log4j.appender.XMLLayout=org.apache.log4j.ConsoleAppender
+log4j.appender.XMLLayout.layout=org.apache.log4j.xml.XMLLayout
+
+##############################################################################
+#
+# ConsoleAppender
+#
+log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender
+log4j.appender.ConsoleAppender.layout=org.apache.log4j.SimpleLayout
+
+##############################################################################
+#
+# DailyRollingFileAppender
+#
+log4j.appender.DailyRollingFileAppender=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DailyRollingFileAppender.File=target/dailyRollingFileAppender
+log4j.appender.DailyRollingFileAppender.layout=org.apache.log4j.SimpleLayout
+
+##############################################################################
+#
+# FileAppender
+#
+log4j.appender.FileAppender=org.apache.log4j.FileAppender
+log4j.appender.FileAppender.File=target/fileAppender
+log4j.appender.FileAppender.layout=org.apache.log4j.SimpleLayout
+
+##############################################################################
+#
+# RollingFileAppender
+#
+log4j.appender.RollingFileAppender=org.apache.log4j.RollingFileAppender
+log4j.appender.RollingFileAppender.File=target/rollingFileAppender
+log4j.appender.RollingFileAppender.layout=org.apache.log4j.SimpleLayout
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.xml
new file mode 100644
index 0000000..7d5d357
--- /dev/null
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-defaultValues.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
+  <appender name="HTMLLayout" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.HTMLLayout"/>
+  </appender>
+
+  <appender name="PatternLayout" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.PatternLayout"/>
+  </appender>
+
+  <appender name="TTCCLayout" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.TTCCLayout"/>
+  </appender>
+
+  <appender name="XMLLayout" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.xml.XMLLayout"/>
+  </appender>
+
+  <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.SimpleLayout"/>
+  </appender>
+
+  <appender name="DailyRollingFileAppender" 
class="org.apache.log4j.DailyRollingFileAppender">
+    <param name="file" value="target/dailyRollingFileAppender"/>
+    <layout class="org.apache.log4j.SimpleLayout"/>
+  </appender>
+
+  <appender name="FileAppender" class="org.apache.log4j.FileAppender">
+    <param name="file" value="target/fileAppender"/>
+    <layout class="org.apache.log4j.SimpleLayout"/>
+  </appender>
+
+  <appender name="RollingFileAppender" 
class="org.apache.log4j.RollingFileAppender">
+    <param name="file" value="target/rollingFileAppender"/>
+    <layout class="org.apache.log4j.SimpleLayout"/>
+  </appender>
+
+  <root>
+    <priority value="TRACE" />
+    <appender-ref ref="HTMLLayout" />
+    <appender-ref ref="PatternLayout" />
+    <appender-ref ref="TTCCLayout" />
+    <appender-ref ref="XMLLayout" />
+    <appender-ref ref="ConsoleAppender" />
+    <appender-ref ref="DailyRollingFileAppender" />
+    <appender-ref ref="FileAppender" />
+    <appender-ref ref="RollingFileAppender" />
+  </root>
+</log4j:configuration>
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
index 188f1f9..d42e654 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.properties
@@ -28,7 +28,11 @@ log4j.rootLogger=TRACE, File
 #
 
 log4j.appender.File=org.apache.log4j.FileAppender
+log4j.appender.File.Append=false
+log4j.appender.File.BufferedIO=true
+log4j.appender.File.BufferSize=1000
 log4j.appender.File.File=target/mylog.txt
+log4j.appender.File.ImmediateFlush=false
 log4j.appender.File.layout=org.apache.log4j.SimpleLayout
 
 log4j.logger.com.example.foo = DEBUG
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.xml
index 37016f1..fdccce7 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-file-SimpleLayout.xml
@@ -18,7 +18,11 @@
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
   <appender name="File" class="org.apache.log4j.FileAppender">
+    <param name="Append" value="false" />
+    <param name="BufferedIO" value="true" />
+    <param name="BufferSize" value="1000" />
     <param name="File" value="target/mylog.txt" />
+    <param name="ImmediateFlush" value="false" />
     <layout class="org.apache.log4j.SimpleLayout" />
   </appender>
 
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.properties
index febf2b8..167cd86 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.properties
@@ -28,4 +28,10 @@ log4j.rootLogger=TRACE, RFA
 # Rolling File Appender
 #
 log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+log4j.appender.RFA.Append=false
+log4j.appender.RFA.BufferedIO=true
+log4j.appender.RFA.BufferSize=1000
 log4j.appender.RFA.File=${java.io.tmpdir}/${hadoop.log.file}
+log4j.appender.RFA.ImmediateFlush=false
+log4j.appender.RFA.MaxBackupIndex=16
+log4j.appender.RFA.MaxFileSize=20 MB
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.xml 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.xml
index 8ced3f5..ccfd9e7 100644
--- a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.xml
+++ b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-1.xml
@@ -17,8 +17,14 @@
 -->
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-  <appender name="RFA" class="org.apache.log4j.DailyRollingFileAppender">
+  <appender name="RFA" class="org.apache.log4j.RollingFileAppender">
+    <param name="Append" value="false" />
+    <param name="BufferedIO" value="true" />
+    <param name="BufferSize" value="1000" />
     <param name="File" value="${java.io.tmpdir}/hadoop.log" />
+    <param name="ImmediateFlush" value="false" />
+    <param name="MaxBackupIndex" value="16" />
+    <param name="MaxFileSize" value="20 MB" />
   </appender>
 
   <root>
diff --git 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-2.properties
 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-2.properties
index 5933fbf..686bc77 100644
--- 
a/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-2.properties
+++ 
b/log4j-1.2-api/src/test/resources/config-1.2/log4j-system-properties-2.properties
@@ -29,4 +29,10 @@ log4j.rootLogger=TRACE, RFA
 # Rolling File Appender
 #
 log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+log4j.appender.RFA.Append=false
+log4j.appender.RFA.BufferedIO=true
+log4j.appender.RFA.BufferSize=1000
 log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+log4j.appender.RFA.ImmediateFlush=false
+log4j.appender.RFA.MaxBackupIndex=16
+log4j.appender.RFA.MaxBackupSize=20 MB

Reply via email to