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>