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 <[email protected]>
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