You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/03/08 17:35:43 UTC

[03/10] logging-log4j2 git commit: LOG4J2-1296 bugfix in ReusableParameterizedMessage: calling getFormattedMessage() multiple times should return correct results

LOG4J2-1296 bugfix in ReusableParameterizedMessage: calling getFormattedMessage() multiple times should return correct results


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/98ded701
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/98ded701
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/98ded701

Branch: refs/heads/gelf-layout-gc-free
Commit: 98ded70186d34bfc664094d5d120b63895ba9668
Parents: f157cc2
Author: rpopma <rp...@apache.org>
Authored: Wed Mar 9 00:58:31 2016 +1100
Committer: rpopma <rp...@apache.org>
Committed: Wed Mar 9 00:58:31 2016 +1100

----------------------------------------------------------------------
 .../message/ReusableParameterizedMessage.java   | 23 ++++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/98ded701/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
index 7d2b1d5..bd6205f 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableParameterizedMessage.java
@@ -31,8 +31,8 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
 public class ReusableParameterizedMessage implements ReusableMessage {
 
     private static final long serialVersionUID = 7800075879295123856L;
+    private static ThreadLocal<StringBuilder> buffer = new ThreadLocal<>();
 
-    private final StringBuilder buffer = new StringBuilder(2048);
     private String messagePattern;
     private int argCount;
     private transient Object[] varargs;
@@ -55,8 +55,6 @@ public class ReusableParameterizedMessage implements ReusableMessage {
 
     private void init(String messagePattern, int argCount, Object[] paramArray) {
         this.varargs = null;
-        this.buffer.setLength(0);
-
         this.messagePattern = messagePattern;
         this.argCount= argCount;
         int usedCount = ParameterFormatter.countArgumentPlaceholders(messagePattern);
@@ -70,10 +68,6 @@ public class ReusableParameterizedMessage implements ReusableMessage {
         }
     }
 
-    public StringBuilder get() {
-        return buffer;
-    }
-
     ReusableParameterizedMessage set(String messagePattern, Object... arguments) {
         init(messagePattern, arguments == null ? 0 : arguments.length, arguments);
         varargs = arguments;
@@ -227,8 +221,19 @@ public class ReusableParameterizedMessage implements ReusableMessage {
      */
     @Override
     public String getFormattedMessage() {
-        formatTo(buffer);
-        return buffer.toString();
+        final StringBuilder sb = getBuffer();
+        formatTo(sb);
+        return sb.toString();
+    }
+
+    private StringBuilder getBuffer() {
+        StringBuilder result = buffer.get();
+        if (result == null) {
+            result = new StringBuilder(Math.min(512, messagePattern.length() * 2));
+            buffer.set(result);
+        }
+        result.setLength(0);
+        return result;
     }
 
     @Override