You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by Ralph Goers <ra...@dslextreme.com> on 2018/07/02 00:03:15 UTC
Re: logging-log4j2 git commit: LOG4J2-2362 ReusableObjectMessage
memory leak
This commit is broken. There were merge conflicts in changes.xml that were not properly resolved. Please fix this asap.
Ralph
> On Jun 29, 2018, at 7:53 PM, ckozak@apache.org wrote:
>
> Repository: logging-log4j2
> Updated Branches:
> refs/heads/release-2.x b66f09c34 -> 377afa006
>
>
> LOG4J2-2362 ReusableObjectMessage memory leak
>
> ReusableObjectMessage would previously retain a reference to
> the most recently logged object.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/377afa00
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/377afa00
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/377afa00
>
> Branch: refs/heads/release-2.x
> Commit: 377afa006b5102c508f1e6578bc05da24385907f
> Parents: b66f09c
> Author: Carter Kozak <ck...@apache.org>
> Authored: Fri Jun 29 16:02:55 2018 -0400
> Committer: Carter Kozak <ck...@apache.org>
> Committed: Fri Jun 29 22:52:54 2018 -0400
>
> ----------------------------------------------------------------------
> .../log4j/message/ReusableMessageFactory.java | 2 +
> .../apache/logging/log4j/LambdaLoggerTest.java | 5 +-
> .../core/EventParameterMemoryLeakTest.java | 10 +-
> src/changes/changes.xml | 174 +++++++++++++++++++
> 4 files changed, 188 insertions(+), 3 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
> ----------------------------------------------------------------------
> diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
> index d75ca01..c258045 100644
> --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
> @@ -86,6 +86,8 @@ public final class ReusableMessageFactory implements MessageFactory2, Serializab
> public static void release(final Message message) { // LOG4J2-1583
> if (message instanceof ReusableParameterizedMessage) {
> ((ReusableParameterizedMessage) message).reserved = false;
> + } else if (message instanceof ReusableObjectMessage) {
> + ((ReusableObjectMessage) message).set(null);
> }
> }
>
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
> index f6d1623..b532171 100644
> --- a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
> +++ b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
> @@ -21,6 +21,7 @@ import java.util.ArrayList;
> import java.util.List;
>
> import org.apache.logging.log4j.message.Message;
> +import org.apache.logging.log4j.message.ReusableMessage;
> import org.apache.logging.log4j.message.SimpleMessage;
> import org.apache.logging.log4j.spi.AbstractLogger;
> import org.apache.logging.log4j.util.Supplier;
> @@ -46,7 +47,9 @@ public class LambdaLoggerTest {
> this.fqcn = fqcn;
> this.level = level;
> this.marker = marker;
> - this.message = message;
> + this.message = (message instanceof ReusableMessage) ?
> + ((ReusableMessage) message).memento() :
> + message;
> this.throwable = t;
> }
> }
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
> ----------------------------------------------------------------------
> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
> index de99eef..d2106f9 100644
> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
> @@ -49,21 +49,27 @@ public class EventParameterMemoryLeakTest {
> }
>
> @Test
> + @SuppressWarnings("UnusedAssignment") // parameter set to null to allow garbage collection
> public void testParametersAreNotLeaked() throws Exception {
> final File file = new File("target", "EventParameterMemoryLeakTest.log");
> assertTrue("Deleted old file before test", !file.exists() || file.delete());
>
> final Logger log = LogManager.getLogger("com.foo.Bar");
> CountDownLatch latch = new CountDownLatch(1);
> - log.info("Message with parameter {}", new ParameterObject("paramValue", latch));
> + Object parameter = new ParameterObject("paramValue", latch);
> + log.info("Message with parameter {}", parameter);
> + log.info(parameter);
> + parameter = null;
> CoreLoggerContexts.stopLoggerContext(file);
> final BufferedReader reader = new BufferedReader(new FileReader(file));
> final String line1 = reader.readLine();
> final String line2 = reader.readLine();
> + final String line3 = reader.readLine();
> reader.close();
> file.delete();
> assertThat(line1, containsString("Message with parameter paramValue"));
> - assertNull("Expected only a single line", line2);
> + assertThat(line2, containsString("paramValue"));
> + assertNull("Expected only a two lines", line3);
> GarbageCollectionHelper gcHelper = new GarbageCollectionHelper();
> gcHelper.run();
> try {
>
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/src/changes/changes.xml
> ----------------------------------------------------------------------
> diff --git a/src/changes/changes.xml b/src/changes/changes.xml
> index d9e0790..9fab226 100644
> --- a/src/changes/changes.xml
> +++ b/src/changes/changes.xml
> @@ -30,6 +30,177 @@
> - "update" - Change
> - "remove" - Removed
> -->
> +<<<<<<< HEAD
> +=======
> + <release version="3.0.0" date="2018-xx-xx" description="GA Release 3.0.0">
> + <action issue="LOG4J2-2171" dev="rmannibucau" type="add">
> + Allow to force LOG4J2 to use TCCL only.
> + </action>
> + <action issue="LOG4J2-1802" dev="mattsicker" type="add">
> + Convert documentation into AsciiDoc format.
> + </action>
> + <action issue="LOG4J2-2268" dev="rgoers" type="fix" due-to="Tilman Hausherr">
> + Improve plugin error message when elements are missing.
> + </action>
> + <action issue="LOG4J2-2255" dev="rgoers" type="update">
> + Use Spotbugs instead of Findbugs. Minimum version is Java 8.
> + </action>
> + <action issue="LOG4J2-2224" dev="rpopma" type="update">
> + Renamed package core.util.datetime to core.time.internal.format to clarify these classes are to be considered private.
> + </action>
> + <action issue="LOG4J2-2225" dev="rpopma" type="update">
> + Moved time-related classes from core.util to core.time. Classes considered private moved to core.time.internal.
> + </action>
> + <action issue="LOG4J2-2228" dev="ggregory" type="update" due-to="Gary Gregory">
> + Split off ZeroMq/JeroMq support into a new module log4j-jeromq.
> + </action>
> + <action issue="LOG4J2-2227" dev="ggregory" type="update" due-to="Gary Gregory">
> + Split off Kafka support into a new module log4j-kafka.
> + </action>
> + <action issue="LOG4J2-2230" dev="ggregory" type="update" due-to="Gary Gregory">
> + Split off SMTP support into a new module log4j-smtp.
> + </action>
> + <action issue="LOG4J2-2231" dev="ggregory" type="update" due-to="Gary Gregory">
> + Move CSV layout from log4j-core to a new module log4j-csv.
> + </action>
> + <action issue="LOG4J2-2232" dev="ggregory" type="update" due-to="Gary Gregory">
> + Move JMS code to a new module log4j-jms.
> + </action>
> + <action issue="LOG4J2-2233" dev="ggregory" type="update" due-to="Gary Gregory">
> + Move JDBC code to a new module log4j-jdbc.
> + </action>
> + <action issue="LOG4J2-2244" dev="ggregory" type="fix" due-to="Gary Gregory">
> + org.apache.logging.log4j.core.lookup.EnvironmentLookup may throw NPE.
> + </action>
> + <action issue="LOG4J2-2237" dev="ggregory" type="update" due-to="Gary Gregory">
> + Move Jackson-based layouts to their own modules: JSON, XML, and YAML.
> + </action>
> + <action issue="LOG4J2-2082" dev="ggregory" type="update" due-to="Gary Gregory">
> + Update Apache Flume from 1.7.0 to 1.8.0.
> + </action>
> + <action issue="LOG4J2-2079" dev="ggregory" type="update" due-to="Gary Gregory">
> + Update Conversant Disruptor from 1.12.10 to 1.12.11.
> + </action>
> + <action issue="LOG4J2-2258" dev="ggregory" type="update" due-to="Gary Gregory">
> + Update LMAX Disruptor from 3.3.7 to 3.3.8.
> + </action>
> + <action issue="LOG4J2-2083" dev="ggregory" type="update" due-to="Gary Gregory">
> + Update Eclipse javax.persistence from 2.1.1 to 2.2.0.
> + </action>
> + <action issue="LOG4J2-2083" dev="ggregory" type="update">
> + Update build to expect Java 8 sources and generate Java 8 byte codes.
> + </action>
> + <action issue="LOG4J2-2259" dev="ggregory" type="update">
> + Update MongoDB 3 module from driver 3.6.1 to 3.6.3.
> + </action>
> + <action issue="LOG4J2-2260" dev="ggregory" type="update">
> + [SMTP] Update javax.mail from 1.6.0 to 1.6.1.
> + </action>
> + <action issue="LOG4J2-2270" dev="ggregory" type="fix" due-to="Cyril Martin">
> + Strings::join, when called with [null] returns "null" instead of EMPTY.
> + </action>
> + <action issue="LOG4J2-2276" dev="ggregory" type="fix" due-to="Sean Baxter">
> + ConcurrentModificationException from org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:71).
> + </action>
> + <action issue="LOG4J2-2274" dev="ggregory" type="fix" due-to="Sebastien Lannez">
> + Allow EnvironmentPropertySource to run with a SecurityManager that rejects environment variable access.
> + </action>
> + <action issue="LOG4J2-2279" dev="ggregory" type="fix" due-to="Gary Gregory">
> + Allow SystemPropertiesPropertySource to run with a SecurityManager that rejects system property access.
> + </action>
> + <action issue="LOG4J2-2279" dev="ggregory" type="fix" due-to="Remko Popma">
> + Move ProcessIdUtil from log4j-api to log4j-core.
> + </action>
> + <action issue="LOG4J2-2283" dev="ggregory" type="fix" due-to="Vishnu Priya Matha">
> + ParserConfigurationException when using Log4j with oracle.xml.jaxp.JXDocumentBuilderFactory.
> + </action>
> + <action issue="LOG4J2-2300" dev="ggregory" type="fix">
> + PoolingDriverConnectionSource does not take into account properties, user name, and password.
> + </action>
> + <action issue="LOG4J2-2302" dev="ggregory" type="update">
> + Status logger should show the Log4j name and version when initializing itself.
> + </action>
> + <action issue="LOG4J2-2304" dev="ggregory" type="update" due-to="wumengsheng">
> + Log4j2 2.8.2 JMX unregister NullPointerException.
> + </action>
> + <action issue="LOG4J2-2306" dev="ckozak" type="fix">
> + FixedDateFormat parses timezone offsets, -8:00 is interpreted as GMT-8:00.
> + </action>
> + <action issue="LOG4J2-2307" dev="ckozak" type="fix">
> + MutableLogEvent and RingBufferLogEvent message mementos retain the original format string.
> + </action>
> + <action issue="LOG4J2-2032" dev="ckozak" type="fix" due-to="Kostiantyn Shchepanovskyi">
> + Curly braces in parameters are not treated as placeholders.
> + </action>
> + <action issue="LOG4J2-2311" dev="ggregory" type="update">
> + Update Jackson from 2.9.4 to 2.9.5.
> + </action>
> + <action issue="LOG4J2-2313" dev="ggregory" type="update">
> + Update LMAX Disruptor from 3.3.8 to 3.4.2.
> + </action>
> + <action issue="LOG4J2-2317" dev="ckozak" type="fix">
> + MutableLogEvent.getNonNullImmutableMessage and Log4jLogEvent.makeMessageImmutable retain format and parameters.
> + </action>
> + <action issue="LOG4J2-2318" dev="ckozak" type="fix">
> + Messages are no longer mutated when the asynchronous queue is full. A warning is logged to the status logger instead.
> + </action>
> + <action issue="LOG4J2-2320" dev="ckozak" type="fix">
> + Fix NPE in AbstractLogger when another exception is thrown, masking the root cause.
> + </action>
> + <action issue="LOG4J2-548" dev="ggregory" type="update" due-to="Shehata, Paresh Varke, Eric Victorson, Martin Laforet">
> + Log4j 2.0 ERROR "Could not search jar" with JBoss EAP 6.2.
> + </action>
> + <action issue="LOG4J2-2321" dev="ckozak" type="fix">
> + AsyncLogger uses the correct level when unspecified. This provides parity between AsyncLogger and Logger.
> + </action>
> + <action issue="LOG4J2-2322" dev="ckozak" type="fix">
> + Custom ContextSelector implementations which select an AsyncLoggerContext disable LoggerConfig.includeLocation
> + by default for parity with AsyncLoggerContextSelector.
> + </action>
> + <action issue="LOG4J2-2269" dev="ckozak" type="fix">
> + MutableLogEvent references to other objects are cleared after each use.
> + Fix a memory leak causing references to parameters to be held after synchronous logging with thread locals enabled.
> + </action>
> + <action issue="LOG4J2-2328" dev="ggregory" type="update">
> + Update JAnsi from 1.17 to 1.17.1.
> + </action>
> + <action issue="LOG4J2-2301" dev="ckozak" type="fix">
> + Mixed async loggers no longer forget parameter values, providing some appenders with an array of nulls.
> + </action>
> + <action issue="LOG4J2-2331" dev="ckozak" type="fix" due-to="Mike Baranski">
> + RollingFileManager debug logging avoids string concatenation and errant braces in favor of parameterized logging.
> + </action>
> + <action issue="LOG4J2-2333" dev="ckozak" type="fix">
> + Handle errors thrown in default disruptor ExceptionHandler implementations to avoid killing background threads.
> + </action>
> + <action issue="LOG4J2-2334" dev="ggregory" type="fix">
> + Add API org.apache.logging.log4j.core.appender.AsyncAppender.getQueueSize().
> + </action>
> + <action issue="LOG4J2-2336" dev="ckozak" type="fix">
> + Remove duplicate hyphen from the AsyncLoggerConfig background thread name.
> + </action>
> + <action issue="LOG4J2-2347" dev="ggregory" type="fix">
> + Update Apache Commons Compress from 1.16.1 to 1.17.
> + </action>
> + <action issue="LOG4J2-2351" dev="ckozak" type="update">
> + Added AbstractLogEvent.getMutableInstant to allow the MutableInstant instance to be modified by classes extending AbstractLogEvent.
> + </action>
> + <action issue="LOG4J2-2352" dev="ckozak" type="fix">
> + RingBufferLogEvent memento messages provide the expected format string, and no longer attempt to substitute parameters into curly braces in parameter toString values.
> + Both RingBufferLogEvent and MutableLogEvent memento implementations memoize results to avoid rebuilding formatted string values.
> + </action>
> + <action issue="LOG4J2-2355" dev="ckozak" type="fix" due-to="Henrik Brautaset Aronsen">
> + PropertiesUtil ignores non-string system properties. Fixes a NoClassDefFoundError initializing StatusLogger
> + caused by an NPE while initializing the static PropertiesUtil field.
> + </action>
> + <action issue="LOG4J2-2357" dev="ggregory" type="update">
> + Update Jackson from 2.9.5 to 2.9.6.
> + </action>
> + <action issue="LOG4J2-2362" dev="ckozak" type="fix">
> + Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
> + </action>
> + </release>
> +>>>>>>> 063e725b8... LOG4J2-2362 ReusableObjectMessage memory leak
> <release version="2.11.1" date="2018-MM-DD" description="GA Release 2.11.1">
> <action issue="LOG4J2-2268" dev="rgoers" type="fix" due-to="Tilman Hausherr">
> Improve plugin error message when elements are missing.
> @@ -119,6 +290,9 @@
> <action issue="LOG4J2-2358" dev="ggregory" type="update">
> Update Kafka client from 1.0.0 to 1.1.0.
> </action>
> + <action issue="LOG4J2-2362" dev="ckozak" type="fix">
> + Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
> + </action>
> </release>
> <release version="2.11.0" date="2018-03-11" description="GA Release 2.11.0">
> <action issue="LOG4J2-2104" dev="rgoers" type="fix">
>
>
Re: logging-log4j2 git commit: LOG4J2-2362 ReusableObjectMessage
memory leak
Posted by Carter Kozak <c4...@gmail.com>.
Sorry, fixed.
On Sun, Jul 1, 2018 at 8:03 PM, Ralph Goers <ra...@dslextreme.com> wrote:
> This commit is broken. There were merge conflicts in changes.xml that were not properly resolved. Please fix this asap.
>
> Ralph
>
>
>> On Jun 29, 2018, at 7:53 PM, ckozak@apache.org wrote:
>>
>> Repository: logging-log4j2
>> Updated Branches:
>> refs/heads/release-2.x b66f09c34 -> 377afa006
>>
>>
>> LOG4J2-2362 ReusableObjectMessage memory leak
>>
>> ReusableObjectMessage would previously retain a reference to
>> the most recently logged object.
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/377afa00
>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/377afa00
>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/377afa00
>>
>> Branch: refs/heads/release-2.x
>> Commit: 377afa006b5102c508f1e6578bc05da24385907f
>> Parents: b66f09c
>> Author: Carter Kozak <ck...@apache.org>
>> Authored: Fri Jun 29 16:02:55 2018 -0400
>> Committer: Carter Kozak <ck...@apache.org>
>> Committed: Fri Jun 29 22:52:54 2018 -0400
>>
>> ----------------------------------------------------------------------
>> .../log4j/message/ReusableMessageFactory.java | 2 +
>> .../apache/logging/log4j/LambdaLoggerTest.java | 5 +-
>> .../core/EventParameterMemoryLeakTest.java | 10 +-
>> src/changes/changes.xml | 174 +++++++++++++++++++
>> 4 files changed, 188 insertions(+), 3 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
>> index d75ca01..c258045 100644
>> --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
>> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
>> @@ -86,6 +86,8 @@ public final class ReusableMessageFactory implements MessageFactory2, Serializab
>> public static void release(final Message message) { // LOG4J2-1583
>> if (message instanceof ReusableParameterizedMessage) {
>> ((ReusableParameterizedMessage) message).reserved = false;
>> + } else if (message instanceof ReusableObjectMessage) {
>> + ((ReusableObjectMessage) message).set(null);
>> }
>> }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
>> index f6d1623..b532171 100644
>> --- a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
>> +++ b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
>> @@ -21,6 +21,7 @@ import java.util.ArrayList;
>> import java.util.List;
>>
>> import org.apache.logging.log4j.message.Message;
>> +import org.apache.logging.log4j.message.ReusableMessage;
>> import org.apache.logging.log4j.message.SimpleMessage;
>> import org.apache.logging.log4j.spi.AbstractLogger;
>> import org.apache.logging.log4j.util.Supplier;
>> @@ -46,7 +47,9 @@ public class LambdaLoggerTest {
>> this.fqcn = fqcn;
>> this.level = level;
>> this.marker = marker;
>> - this.message = message;
>> + this.message = (message instanceof ReusableMessage) ?
>> + ((ReusableMessage) message).memento() :
>> + message;
>> this.throwable = t;
>> }
>> }
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
>> ----------------------------------------------------------------------
>> diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
>> index de99eef..d2106f9 100644
>> --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
>> +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
>> @@ -49,21 +49,27 @@ public class EventParameterMemoryLeakTest {
>> }
>>
>> @Test
>> + @SuppressWarnings("UnusedAssignment") // parameter set to null to allow garbage collection
>> public void testParametersAreNotLeaked() throws Exception {
>> final File file = new File("target", "EventParameterMemoryLeakTest.log");
>> assertTrue("Deleted old file before test", !file.exists() || file.delete());
>>
>> final Logger log = LogManager.getLogger("com.foo.Bar");
>> CountDownLatch latch = new CountDownLatch(1);
>> - log.info("Message with parameter {}", new ParameterObject("paramValue", latch));
>> + Object parameter = new ParameterObject("paramValue", latch);
>> + log.info("Message with parameter {}", parameter);
>> + log.info(parameter);
>> + parameter = null;
>> CoreLoggerContexts.stopLoggerContext(file);
>> final BufferedReader reader = new BufferedReader(new FileReader(file));
>> final String line1 = reader.readLine();
>> final String line2 = reader.readLine();
>> + final String line3 = reader.readLine();
>> reader.close();
>> file.delete();
>> assertThat(line1, containsString("Message with parameter paramValue"));
>> - assertNull("Expected only a single line", line2);
>> + assertThat(line2, containsString("paramValue"));
>> + assertNull("Expected only a two lines", line3);
>> GarbageCollectionHelper gcHelper = new GarbageCollectionHelper();
>> gcHelper.run();
>> try {
>>
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/377afa00/src/changes/changes.xml
>> ----------------------------------------------------------------------
>> diff --git a/src/changes/changes.xml b/src/changes/changes.xml
>> index d9e0790..9fab226 100644
>> --- a/src/changes/changes.xml
>> +++ b/src/changes/changes.xml
>> @@ -30,6 +30,177 @@
>> - "update" - Change
>> - "remove" - Removed
>> -->
>> +<<<<<<< HEAD
>> +=======
>> + <release version="3.0.0" date="2018-xx-xx" description="GA Release 3.0.0">
>> + <action issue="LOG4J2-2171" dev="rmannibucau" type="add">
>> + Allow to force LOG4J2 to use TCCL only.
>> + </action>
>> + <action issue="LOG4J2-1802" dev="mattsicker" type="add">
>> + Convert documentation into AsciiDoc format.
>> + </action>
>> + <action issue="LOG4J2-2268" dev="rgoers" type="fix" due-to="Tilman Hausherr">
>> + Improve plugin error message when elements are missing.
>> + </action>
>> + <action issue="LOG4J2-2255" dev="rgoers" type="update">
>> + Use Spotbugs instead of Findbugs. Minimum version is Java 8.
>> + </action>
>> + <action issue="LOG4J2-2224" dev="rpopma" type="update">
>> + Renamed package core.util.datetime to core.time.internal.format to clarify these classes are to be considered private.
>> + </action>
>> + <action issue="LOG4J2-2225" dev="rpopma" type="update">
>> + Moved time-related classes from core.util to core.time. Classes considered private moved to core.time.internal.
>> + </action>
>> + <action issue="LOG4J2-2228" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Split off ZeroMq/JeroMq support into a new module log4j-jeromq.
>> + </action>
>> + <action issue="LOG4J2-2227" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Split off Kafka support into a new module log4j-kafka.
>> + </action>
>> + <action issue="LOG4J2-2230" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Split off SMTP support into a new module log4j-smtp.
>> + </action>
>> + <action issue="LOG4J2-2231" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Move CSV layout from log4j-core to a new module log4j-csv.
>> + </action>
>> + <action issue="LOG4J2-2232" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Move JMS code to a new module log4j-jms.
>> + </action>
>> + <action issue="LOG4J2-2233" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Move JDBC code to a new module log4j-jdbc.
>> + </action>
>> + <action issue="LOG4J2-2244" dev="ggregory" type="fix" due-to="Gary Gregory">
>> + org.apache.logging.log4j.core.lookup.EnvironmentLookup may throw NPE.
>> + </action>
>> + <action issue="LOG4J2-2237" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Move Jackson-based layouts to their own modules: JSON, XML, and YAML.
>> + </action>
>> + <action issue="LOG4J2-2082" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Update Apache Flume from 1.7.0 to 1.8.0.
>> + </action>
>> + <action issue="LOG4J2-2079" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Update Conversant Disruptor from 1.12.10 to 1.12.11.
>> + </action>
>> + <action issue="LOG4J2-2258" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Update LMAX Disruptor from 3.3.7 to 3.3.8.
>> + </action>
>> + <action issue="LOG4J2-2083" dev="ggregory" type="update" due-to="Gary Gregory">
>> + Update Eclipse javax.persistence from 2.1.1 to 2.2.0.
>> + </action>
>> + <action issue="LOG4J2-2083" dev="ggregory" type="update">
>> + Update build to expect Java 8 sources and generate Java 8 byte codes.
>> + </action>
>> + <action issue="LOG4J2-2259" dev="ggregory" type="update">
>> + Update MongoDB 3 module from driver 3.6.1 to 3.6.3.
>> + </action>
>> + <action issue="LOG4J2-2260" dev="ggregory" type="update">
>> + [SMTP] Update javax.mail from 1.6.0 to 1.6.1.
>> + </action>
>> + <action issue="LOG4J2-2270" dev="ggregory" type="fix" due-to="Cyril Martin">
>> + Strings::join, when called with [null] returns "null" instead of EMPTY.
>> + </action>
>> + <action issue="LOG4J2-2276" dev="ggregory" type="fix" due-to="Sean Baxter">
>> + ConcurrentModificationException from org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:71).
>> + </action>
>> + <action issue="LOG4J2-2274" dev="ggregory" type="fix" due-to="Sebastien Lannez">
>> + Allow EnvironmentPropertySource to run with a SecurityManager that rejects environment variable access.
>> + </action>
>> + <action issue="LOG4J2-2279" dev="ggregory" type="fix" due-to="Gary Gregory">
>> + Allow SystemPropertiesPropertySource to run with a SecurityManager that rejects system property access.
>> + </action>
>> + <action issue="LOG4J2-2279" dev="ggregory" type="fix" due-to="Remko Popma">
>> + Move ProcessIdUtil from log4j-api to log4j-core.
>> + </action>
>> + <action issue="LOG4J2-2283" dev="ggregory" type="fix" due-to="Vishnu Priya Matha">
>> + ParserConfigurationException when using Log4j with oracle.xml.jaxp.JXDocumentBuilderFactory.
>> + </action>
>> + <action issue="LOG4J2-2300" dev="ggregory" type="fix">
>> + PoolingDriverConnectionSource does not take into account properties, user name, and password.
>> + </action>
>> + <action issue="LOG4J2-2302" dev="ggregory" type="update">
>> + Status logger should show the Log4j name and version when initializing itself.
>> + </action>
>> + <action issue="LOG4J2-2304" dev="ggregory" type="update" due-to="wumengsheng">
>> + Log4j2 2.8.2 JMX unregister NullPointerException.
>> + </action>
>> + <action issue="LOG4J2-2306" dev="ckozak" type="fix">
>> + FixedDateFormat parses timezone offsets, -8:00 is interpreted as GMT-8:00.
>> + </action>
>> + <action issue="LOG4J2-2307" dev="ckozak" type="fix">
>> + MutableLogEvent and RingBufferLogEvent message mementos retain the original format string.
>> + </action>
>> + <action issue="LOG4J2-2032" dev="ckozak" type="fix" due-to="Kostiantyn Shchepanovskyi">
>> + Curly braces in parameters are not treated as placeholders.
>> + </action>
>> + <action issue="LOG4J2-2311" dev="ggregory" type="update">
>> + Update Jackson from 2.9.4 to 2.9.5.
>> + </action>
>> + <action issue="LOG4J2-2313" dev="ggregory" type="update">
>> + Update LMAX Disruptor from 3.3.8 to 3.4.2.
>> + </action>
>> + <action issue="LOG4J2-2317" dev="ckozak" type="fix">
>> + MutableLogEvent.getNonNullImmutableMessage and Log4jLogEvent.makeMessageImmutable retain format and parameters.
>> + </action>
>> + <action issue="LOG4J2-2318" dev="ckozak" type="fix">
>> + Messages are no longer mutated when the asynchronous queue is full. A warning is logged to the status logger instead.
>> + </action>
>> + <action issue="LOG4J2-2320" dev="ckozak" type="fix">
>> + Fix NPE in AbstractLogger when another exception is thrown, masking the root cause.
>> + </action>
>> + <action issue="LOG4J2-548" dev="ggregory" type="update" due-to="Shehata, Paresh Varke, Eric Victorson, Martin Laforet">
>> + Log4j 2.0 ERROR "Could not search jar" with JBoss EAP 6.2.
>> + </action>
>> + <action issue="LOG4J2-2321" dev="ckozak" type="fix">
>> + AsyncLogger uses the correct level when unspecified. This provides parity between AsyncLogger and Logger.
>> + </action>
>> + <action issue="LOG4J2-2322" dev="ckozak" type="fix">
>> + Custom ContextSelector implementations which select an AsyncLoggerContext disable LoggerConfig.includeLocation
>> + by default for parity with AsyncLoggerContextSelector.
>> + </action>
>> + <action issue="LOG4J2-2269" dev="ckozak" type="fix">
>> + MutableLogEvent references to other objects are cleared after each use.
>> + Fix a memory leak causing references to parameters to be held after synchronous logging with thread locals enabled.
>> + </action>
>> + <action issue="LOG4J2-2328" dev="ggregory" type="update">
>> + Update JAnsi from 1.17 to 1.17.1.
>> + </action>
>> + <action issue="LOG4J2-2301" dev="ckozak" type="fix">
>> + Mixed async loggers no longer forget parameter values, providing some appenders with an array of nulls.
>> + </action>
>> + <action issue="LOG4J2-2331" dev="ckozak" type="fix" due-to="Mike Baranski">
>> + RollingFileManager debug logging avoids string concatenation and errant braces in favor of parameterized logging.
>> + </action>
>> + <action issue="LOG4J2-2333" dev="ckozak" type="fix">
>> + Handle errors thrown in default disruptor ExceptionHandler implementations to avoid killing background threads.
>> + </action>
>> + <action issue="LOG4J2-2334" dev="ggregory" type="fix">
>> + Add API org.apache.logging.log4j.core.appender.AsyncAppender.getQueueSize().
>> + </action>
>> + <action issue="LOG4J2-2336" dev="ckozak" type="fix">
>> + Remove duplicate hyphen from the AsyncLoggerConfig background thread name.
>> + </action>
>> + <action issue="LOG4J2-2347" dev="ggregory" type="fix">
>> + Update Apache Commons Compress from 1.16.1 to 1.17.
>> + </action>
>> + <action issue="LOG4J2-2351" dev="ckozak" type="update">
>> + Added AbstractLogEvent.getMutableInstant to allow the MutableInstant instance to be modified by classes extending AbstractLogEvent.
>> + </action>
>> + <action issue="LOG4J2-2352" dev="ckozak" type="fix">
>> + RingBufferLogEvent memento messages provide the expected format string, and no longer attempt to substitute parameters into curly braces in parameter toString values.
>> + Both RingBufferLogEvent and MutableLogEvent memento implementations memoize results to avoid rebuilding formatted string values.
>> + </action>
>> + <action issue="LOG4J2-2355" dev="ckozak" type="fix" due-to="Henrik Brautaset Aronsen">
>> + PropertiesUtil ignores non-string system properties. Fixes a NoClassDefFoundError initializing StatusLogger
>> + caused by an NPE while initializing the static PropertiesUtil field.
>> + </action>
>> + <action issue="LOG4J2-2357" dev="ggregory" type="update">
>> + Update Jackson from 2.9.5 to 2.9.6.
>> + </action>
>> + <action issue="LOG4J2-2362" dev="ckozak" type="fix">
>> + Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
>> + </action>
>> + </release>
>> +>>>>>>> 063e725b8... LOG4J2-2362 ReusableObjectMessage memory leak
>> <release version="2.11.1" date="2018-MM-DD" description="GA Release 2.11.1">
>> <action issue="LOG4J2-2268" dev="rgoers" type="fix" due-to="Tilman Hausherr">
>> Improve plugin error message when elements are missing.
>> @@ -119,6 +290,9 @@
>> <action issue="LOG4J2-2358" dev="ggregory" type="update">
>> Update Kafka client from 1.0.0 to 1.1.0.
>> </action>
>> + <action issue="LOG4J2-2362" dev="ckozak" type="fix">
>> + Fixed a memory leak in which ReusableObjectMessage would hold a reference to the most recently logged object.
>> + </action>
>> </release>
>> <release version="2.11.0" date="2018-03-11" description="GA Release 2.11.0">
>> <action issue="LOG4J2-2104" dev="rgoers" type="fix">
>>
>>
>
>