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