You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2022/03/28 22:10:57 UTC
[logging-log4j2] 05/05: Adds support for missing Log4j 1.x properties and fixes default values (#737)
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit fdd2caba9792b35df06748d1beaf7304763deb87
Author: ppkarwasz <pi...@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
Conflicts:
log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesConfigurationTest.java
---
.../org/apache/log4j/builders/AbstractBuilder.java | 2 +
.../org/apache/log4j/builders/BooleanHolder.java | 6 +-
.../builders/appender/ConsoleAppenderBuilder.java | 54 ++++--
.../appender/DailyRollingFileAppenderBuilder.java | 58 +++++--
.../builders/appender/FileAppenderBuilder.java | 23 ++-
.../appender/RollingFileAppenderBuilder.java | 51 ++++--
.../log4j/builders/layout/HtmlLayoutBuilder.java | 9 +-
.../log4j/builders/layout/TTCCLayoutBuilder.java | 2 +-
.../log4j/config/Log4j1ConfigurationParser.java | 28 +++-
.../config/AbstractLog4j1ConfigurationTest.java | 182 ++++++++++++++++++---
.../config/Log4j1ConfigurationFactoryTest.java | 5 +
.../log4j/config/PropertiesConfigurationTest.java | 6 +
.../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 +
37 files changed, 559 insertions(+), 102 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 f7a482b..50b3ec1 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/BooleanHolder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java
index 16e46d3..d5319b0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BooleanHolder.java
@@ -21,7 +21,11 @@ package org.apache.log4j.builders;
*/
public class BooleanHolder extends Holder<Boolean> {
public BooleanHolder() {
- super(Boolean.FALSE);
+ this(false);
+ }
+
+ public BooleanHolder(boolean value) {
+ super(value);
}
@Override
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 5f5af5d..889a4c8 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
@@ -16,12 +16,25 @@
*/
package org.apache.log4j.builders.appender;
+
+import static org.apache.log4j.builders.BuilderManager.CATEGORY;
+import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
+import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
+import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.bridge.AppenderWrapper;
import org.apache.log4j.bridge.LayoutAdapter;
import org.apache.log4j.bridge.LayoutWrapper;
import org.apache.log4j.builders.AbstractBuilder;
+import org.apache.log4j.builders.BooleanHolder;
import org.apache.log4j.builders.Holder;
import org.apache.log4j.config.Log4j1Configuration;
import org.apache.log4j.config.PropertiesConfiguration;
@@ -33,19 +46,6 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.w3c.dom.Element;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import static org.apache.log4j.builders.BuilderManager.CATEGORY;
-import static org.apache.log4j.config.Log4j1Configuration.THRESHOLD_PARAM;
-import static org.apache.log4j.xml.XmlConfiguration.FILTER_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.LAYOUT_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.NAME_ATTR;
-import static org.apache.log4j.xml.XmlConfiguration.PARAM_TAG;
-import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
-import static org.apache.log4j.xml.XmlConfiguration.forEachElement;
-
/**
* Build a Console Appender
*/
@@ -55,6 +55,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();
@@ -72,6 +73,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder implements AppenderB
Holder<Layout> layout = new Holder<>();
Holder<List<Filter>> filters = new Holder<>(new ArrayList<>());
Holder<String> level = new Holder<>();
+ Holder<Boolean> follow = new BooleanHolder();
forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
@@ -109,6 +111,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;
}
@@ -125,7 +145,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
@@ -135,11 +155,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) {
@@ -153,6 +174,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 d098f29..eaf7c00 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
@@ -52,6 +52,9 @@ import static org.apache.log4j.xml.XmlConfiguration.*;
@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() {
@@ -68,10 +71,11 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
Holder<Filter> filter = new Holder<>();
Holder<String> fileName = new Holder<>();
Holder<String> level = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder();
- Holder<Boolean> append = new BooleanHolder();
- Holder<Boolean> bufferedIo = new BooleanHolder();
+ Holder<Boolean> immediateFlush = new BooleanHolder(true);
+ Holder<Boolean> append = new BooleanHolder(true);
+ Holder<Boolean> bufferedIo = new BooleanHolder(false);
Holder<Integer> bufferSize = new Holder<>(8192);
+ Holder<String> datePattern = new Holder<>(DEFAULT_DATE_PATTERN);
forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
switch (currentElement.getTagName()) {
case LAYOUT_TAG:
@@ -121,13 +125,32 @@ 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, config.getComponent(Clock.KEY));
+ level.get(), bufferedIo.get(), bufferSize.get(), datePattern.get(), config,
+ config.getComponent(Clock.KEY));
}
@Override
@@ -137,22 +160,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"));
- return createAppender(name, layout, filter, fileName, append, immediateFlush,
- level, bufferedIo, bufferSize, configuration, configuration.getComponent(Clock.KEY));
+ 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,
+ datePattern, configuration, configuration.getComponent(Clock.KEY));
}
- 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 Clock clock) {
+ 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, String datePattern,
+ final T configuration, final Clock clock) {
org.apache.logging.log4j.core.Layout<?> fileLayout = null;
if (bufferedIo) {
- immediateFlush = true;
+ immediateFlush = false;
}
if (layout instanceof LayoutWrapper) {
fileLayout = ((LayoutWrapper) layout).getLayout();
@@ -164,7 +188,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().setClock(clock).setModulate(true).build();
TriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(timePolicy);
RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
@@ -173,10 +197,12 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
.build();
return new AppenderWrapper(RollingFileAppender.newBuilder()
.setName(name)
+ .setAppend(append)
.setConfiguration(configuration)
.setLayout(fileLayout)
.setFilter(fileFilter)
.setFileName(fileName)
+ .setBufferedIo(bufferedIo)
.setBufferSize(bufferSize)
.setImmediateFlush(immediateFlush)
.setFilePattern(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 7697232..857e21e 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
@@ -67,9 +67,9 @@ public class FileAppenderBuilder extends AbstractBuilder implements AppenderBuil
Holder<Filter> filter = new Holder<>();
Holder<String> fileName = new Holder<>();
Holder<String> level = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder();
- Holder<Boolean> append = new BooleanHolder();
- Holder<Boolean> bufferedIo = new BooleanHolder();
+ Holder<Boolean> immediateFlush = new BooleanHolder(true);
+ Holder<Boolean> append = new BooleanHolder(true);
+ Holder<Boolean> bufferedIo = new BooleanHolder(false);
Holder<Integer> bufferSize = new Holder<>(8192);
forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
switch (currentElement.getTagName()) {
@@ -120,6 +120,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;
}
@@ -137,9 +146,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);
@@ -150,7 +159,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 a52b69e..d7abfc7 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
@@ -53,6 +53,9 @@ import static org.apache.log4j.xml.XmlConfiguration.*;
@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() {
@@ -68,12 +71,12 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
Holder<Layout> layout = new Holder<>();
Holder<Filter> filter = new Holder<>();
Holder<String> fileName = new Holder<>();
- Holder<Boolean> immediateFlush = new BooleanHolder();
- Holder<Boolean> append = new BooleanHolder();
- Holder<Boolean> bufferedIo = new BooleanHolder();
+ Holder<Boolean> immediateFlush = new BooleanHolder(true);
+ Holder<Boolean> append = new BooleanHolder(true);
+ Holder<Boolean> bufferedIo = new BooleanHolder(false);
Holder<Integer> bufferSize = new Holder<>(8192);
- Holder<String> maxSize = new Holder<>();
- Holder<String> maxBackups = new Holder<>();
+ Holder<String> maxSize = new Holder<>(DEFAULT_MAX_SIZE);
+ Holder<String> maxBackups = new Holder<>(DEFAULT_MAX_BACKUPS);
Holder<String> level = new Holder<>();
forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
switch (currentElement.getTagName()) {
@@ -142,13 +145,23 @@ 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(), config.getComponent(Clock.KEY));
+ return createAppender(name, config, layout.get(), filter.get(), append.get(), bufferedIo.get(),
+ bufferSize.get(), immediateFlush.get(), fileName.get(), level.get(), maxSize.get(), maxBackups.get(),
+ config.getComponent(Clock.KEY));
}
@Override
@@ -158,21 +171,23 @@ 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 append = getBooleanProperty(APPEND_PARAM, true);
+ boolean immediateFlush = getBooleanProperty(IMMEDIATE_FLUSH_PARAM, true);
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, configuration.getComponent(Clock.KEY));
+ 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, configuration.getComponent(Clock.KEY));
}
- 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,
+ private Appender createAppender(final String name, final Log4j1Configuration config, final Layout layout,
+ final Filter filter, final boolean append, final boolean bufferedIo, final int bufferSize,
+ boolean immediateFlush, final String fileName, final String level, final String maxSize,
final String maxBackups, final Clock clock) {
org.apache.logging.log4j.core.Layout<?> fileLayout = null;
- if (bufferedIo) {
- immediateFlush = true;
+ if (!bufferedIo) {
+ immediateFlush = false;
}
if (layout instanceof LayoutWrapper) {
fileLayout = ((LayoutWrapper) layout).getLayout();
@@ -197,7 +212,9 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
.setConfiguration(config)
.setLayout(fileLayout)
.setFilter(fileFilter)
+ .setAppend(append)
.setBufferedIo(bufferedIo)
+ .setBufferSize(bufferSize)
.setImmediateFlush(immediateFlush)
.setFileName(fileName)
.setFilePattern(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 196225d..fc32f32 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 static org.apache.log4j.xml.XmlConfiguration.*;
@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 Holder<String> title = new Holder<>();
- final Holder<Boolean> locationInfo = new BooleanHolder();
+ final Holder<String> title = new Holder<>("Log4J Log Messages");
+ final Holder<Boolean> locationInfo = new BooleanHolder(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 a2a2226..9a57c80 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 962bdeb..c16be44 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..8088708 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,98 @@ 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 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 5917156..95f6226 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
@@ -142,4 +142,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 8cc1183..85d2859 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
@@ -257,4 +257,10 @@ public class PropertiesConfigurationTest extends AbstractLog4j1ConfigurationTest
public void testSystemProperties2() throws Exception {
super.testSystemProperties2();
}
+
+ @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 d8918bc..6cacbf8 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
@@ -180,4 +180,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