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 13:22:34 UTC

logging-log4j2 git commit: LOG4J2-1715 Avoid allocating temporary objects in NdcPatternConverter

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 3e34488dc -> 7fb832460


LOG4J2-1715 Avoid allocating temporary objects in NdcPatternConverter


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

Branch: refs/heads/master
Commit: 7fb8324601b396cb92f9a50b72c1ecb423370001
Parents: 3e34488
Author: rpopma <rp...@apache.org>
Authored: Sat Nov 19 22:22:24 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Nov 19 22:22:24 2016 +0900

----------------------------------------------------------------------
 .../log4j/spi/DefaultThreadContextStack.java       | 16 ++++++++++++++--
 .../log4j/spi/MutableThreadContextStack.java       | 17 +++++++++++++++--
 src/changes/changes.xml                            |  3 +++
 3 files changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7fb83246/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
index 241fbb7..7a07a89 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.java
@@ -22,13 +22,15 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.logging.log4j.ThreadContext.ContextStack;
+import org.apache.logging.log4j.util.StringBuilderFormattable;
+import org.apache.logging.log4j.util.StringBuilders;
 import org.apache.logging.log4j.util.Strings;
 
 /**
  * A copy-on-write thread-safe variant of {@code org.apache.logging.log4j.spi.ThreadContextStack} in which all mutative
  * operations (add, pop, and so on) are implemented by making a fresh copy of the underlying list.
  */
-public class DefaultThreadContextStack implements ThreadContextStack {
+public class DefaultThreadContextStack implements ThreadContextStack, StringBuilderFormattable {
 
     private static final long serialVersionUID = 5050501L;
 
@@ -281,6 +283,16 @@ public class DefaultThreadContextStack implements ThreadContextStack {
     }
 
     @Override
+    public void formatTo(final StringBuilder buffer) {
+        final MutableThreadContextStack values = STACK.get();
+        if (values == null) {
+            buffer.append("[]");
+        } else {
+            StringBuilders.appendValue(buffer, values);
+        }
+    }
+
+    @Override
     public void trim(final int depth) {
         if (depth < 0) {
             throw new IllegalArgumentException("Maximum stack depth cannot be negative");
@@ -297,7 +309,7 @@ public class DefaultThreadContextStack implements ThreadContextStack {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see org.apache.logging.log4j.ThreadContext.ContextStack#getImmutableStackOrNull()
      */
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7fb83246/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.java
index 9722684..03c77da 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.java
@@ -22,11 +22,12 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.logging.log4j.ThreadContext.ContextStack;
+import org.apache.logging.log4j.util.StringBuilderFormattable;
 
 /**
  * TODO
  */
-public class MutableThreadContextStack implements ThreadContextStack {
+public class MutableThreadContextStack implements ThreadContextStack, StringBuilderFormattable {
 
     private static final long serialVersionUID = 50505011L;
 
@@ -197,6 +198,18 @@ public class MutableThreadContextStack implements ThreadContextStack {
     }
 
     @Override
+    public void formatTo(final StringBuilder buffer) {
+        buffer.append('[');
+        for (int i = 0; i < list.size(); i++) {
+            if (i > 0) {
+                buffer.append(',').append(' ');
+            }
+            buffer.append(list.get(i));
+        }
+        buffer.append(']');
+    }
+
+    @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
@@ -238,7 +251,7 @@ public class MutableThreadContextStack implements ThreadContextStack {
     public void freeze() {
         frozen = true;
     }
-    
+
     /**
      * Returns whether this context stack is frozen.
      * @return whether this context stack is frozen.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7fb83246/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 90dbf16..11cf886 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-1715" dev="rpopma" type="fix">
+        (GC) Avoid allocating temporary objects in NdcPatternConverter. (Note that use of the ThreadContext stack is not garbage-free.)
+      </action>
       <action issue="LOG4J2-1714" dev="rpopma" type="fix">
         (GC) Avoid allocating temporary objects in AbstractStyleNameConverter.
       </action>