Repository: logging-log4j2 Updated Branches: refs/heads/master 78adf687b -> 6d0267967
LOG4J2-1669 make MaxLengthConverter garbage-free Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6d026796 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6d026796 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6d026796 Branch: refs/heads/master Commit: 6d0267967d45ba055c19b5ac3d03142d862e5a22 Parents: 78adf68 Author: rpopma <[email protected]> Authored: Sun Nov 6 20:37:49 2016 +0900 Committer: rpopma <[email protected]> Committed: Sun Nov 6 20:37:49 2016 +0900 ---------------------------------------------------------------------- .../log4j/core/pattern/MaxLengthConverter.java | 17 ++++++++--------- log4j-core/src/test/resources/gcFreeLogging.xml | 6 +++--- .../test/resources/gcFreeMixedSyncAsyncLogging.xml | 6 +++--- src/changes/changes.xml | 3 +++ 4 files changed, 17 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d026796/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MaxLengthConverter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MaxLengthConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MaxLengthConverter.java index ca053f2..8fb9270 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MaxLengthConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MaxLengthConverter.java @@ -84,20 +84,19 @@ public final class MaxLengthConverter extends LogEventPatternConverter { @Override public void format(final LogEvent event, final StringBuilder toAppendTo) { - final StringBuilder buf = new StringBuilder(); - for (final PatternFormatter formatter : formatters) { - formatter.format(event, buf); - if (buf.length() > maxLength) { // stop early + final int initialLength = toAppendTo.length(); + for (int i = 0; i < formatters.size(); i++) { + final PatternFormatter formatter = formatters.get(i); + formatter.format(event, toAppendTo); + if (toAppendTo.length() > initialLength + maxLength) { // stop early break; } } - if (buf.length() > maxLength) { - buf.setLength(maxLength); + if (toAppendTo.length() > initialLength + maxLength) { + toAppendTo.setLength(initialLength + maxLength); if (maxLength > 20) { // only append ellipses if length is not very short - buf.append("..."); + toAppendTo.append("..."); } } - toAppendTo.append(buf); } - } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d026796/log4j-core/src/test/resources/gcFreeLogging.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/gcFreeLogging.xml b/log4j-core/src/test/resources/gcFreeLogging.xml index 41101eb..a54b249 100644 --- a/log4j-core/src/test/resources/gcFreeLogging.xml +++ b/log4j-core/src/test/resources/gcFreeLogging.xml @@ -6,13 +6,13 @@ </Console> <File name="File" fileName="target/gcfreefile.log" bufferedIO="false"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{DEFAULT}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> </File> <RollingFile name="RollingFile" fileName="target/gcfreeRollingFile.log" filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz"> <PatternLayout> - <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="50M" /> @@ -20,7 +20,7 @@ </RollingFile> <RandomAccessFile name="RandomAccessFile" fileName="target/gcfreeRAF.log" immediateFlush="false" append="false"> <PatternLayout> - <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> </PatternLayout> </RandomAccessFile> <RollingRandomAccessFile name="RollingRandomAccessFile" http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d026796/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml index 62a7885..8e09577 100644 --- a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml +++ b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml @@ -6,13 +6,13 @@ </Console> <File name="File" fileName="target/gcfreefileMixed.log" bufferedIO="false"> <PatternLayout> - <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> </File> <RollingFile name="RollingFile" fileName="target/gcfreeRollingFileMixed.log" filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz"> <PatternLayout> - <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> + <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="50M" /> @@ -20,7 +20,7 @@ </RollingFile> <RandomAccessFile name="RandomAccessFile" fileName="target/gcfreeRAFMixed.log" immediateFlush="false" append="false"> <PatternLayout> - <Pattern>%d{DEFAULT}{UTC} %r %sn %marker %markerSimpleName %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> + <Pattern>%d{DEFAULT}{UTC} %r %sn %marker %maxLen{%markerSimpleName}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern> </PatternLayout> </RandomAccessFile> <RollingRandomAccessFile name="RollingRandomAccessFile" http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d026796/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 72be3fa..85d095d 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -24,6 +24,9 @@ </properties> <body> <release version="2.8" date="2016-MM-DD" description="GA Release 2.8"> + <action issue="LOG4J2-1669" dev="rpopma" type="fix"> + (GC) Avoid allocating temporary objects in MaxLengthConverter. + </action> <action issue="LOG4J2-1668" dev="rpopma" type="fix"> (GC) Avoid allocating temporary objects in MarkerPatternConverter. </action>
