You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/11/19 12:48:32 UTC

logging-log4j2 git commit: LOG4J2-1714 Avoid allocating temporary objects in AbstractStyleNameConverter

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 <rp...@apache.org>
Authored: Sat Nov 19 21:48:23 2016 +0900
Committer: rpopma <rp...@apache.org>
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>