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