Repository: logging-log4j2 Updated Branches: refs/heads/master 0f3d9cfe3 -> 3e34488dc
LOG4J2-1714 Avoid allocating temporary objects in AbstractStyleNameConverter Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3e34488d Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3e34488d Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3e34488d Branch: refs/heads/master Commit: 3e34488dc8a4d6cddc298c96ba1d36840661a757 Parents: 0f3d9cf Author: rpopma <[email protected]> Authored: Sat Nov 19 21:48:23 2016 +0900 Committer: rpopma <[email protected]> Committed: Sat Nov 19 21:48:23 2016 +0900 ---------------------------------------------------------------------- .../core/pattern/AbstractStyleNameConverter.java | 14 +++++++++----- .../apache/logging/log4j/core/pattern/AnsiEscape.java | 6 ++++-- src/changes/changes.xml | 3 +++ 3 files changed, 16 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3e34488d/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java index c15c9fc..2e1db29 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java @@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.layout.PatternLayout; +import org.apache.logging.log4j.util.PerformanceSensitive; /** * Style pattern converter. Adds ANSI color styling to the result of the enclosed pattern. @@ -370,13 +371,16 @@ public abstract class AbstractStyleNameConverter extends LogEventPatternConverte * {@inheritDoc} */ @Override + @PerformanceSensitive("allocation") public void format(final LogEvent event, final StringBuilder toAppendTo) { - final StringBuilder buf = new StringBuilder(); - for (final PatternFormatter formatter : formatters) { - formatter.format(event, buf); + final int start = toAppendTo.length(); + for (int i = 0; i < formatters.size(); i++) { + final PatternFormatter formatter = formatters.get(i); + formatter.format(event, toAppendTo); } - if (buf.length() > 0) { - toAppendTo.append(style).append(buf.toString()).append(AnsiEscape.getDefaultStyle()); + if (toAppendTo.length() > start) { + toAppendTo.insert(start, style); + toAppendTo.append(AnsiEscape.getDefaultStyle()); } } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3e34488d/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java index 33b2e64..c831234 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java @@ -40,7 +40,7 @@ public enum AnsiEscape { * </p> */ CSI("\u001b["), - + /** * Escape suffix. */ @@ -216,6 +216,8 @@ public enum AnsiEscape { */ BG_WHITE("47"); + private static final String DEFAULT_STYLE = CSI.getCode() + SUFFIX.getCode(); + private final String code; AnsiEscape(final String code) { @@ -228,7 +230,7 @@ public enum AnsiEscape { * @return the default style */ public static String getDefaultStyle() { - return CSI.getCode() + SUFFIX.getCode(); + return DEFAULT_STYLE; } /** http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3e34488d/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 494b483..90dbf16 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -39,6 +39,9 @@ <action issue="LOG4J2-1706" dev="rpopma" type="fix"> Make TimeFilter usable as global filter and as logger filter. </action> + <action issue="LOG4J2-1714" dev="rpopma" type="fix"> + (GC) Avoid allocating temporary objects in AbstractStyleNameConverter. + </action> <action issue="LOG4J2-1680" dev="rpopma" type="fix"> (GC) Avoid allocating temporary objects in TimeFilter. </action>
