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/20 16:48:47 UTC
logging-log4j2 git commit: LOG4J2-1716 Avoid allocating temporary
objects in MapPatternConverter
Repository: logging-log4j2
Updated Branches:
refs/heads/master c136d0d5a -> 39dbbc98b
LOG4J2-1716 Avoid allocating temporary objects in MapPatternConverter
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/39dbbc98
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/39dbbc98
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/39dbbc98
Branch: refs/heads/master
Commit: 39dbbc98b355c8df812e04ee2aa94b0fed76f0c5
Parents: c136d0d
Author: rpopma <rp...@apache.org>
Authored: Mon Nov 21 01:48:40 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Nov 21 01:48:40 2016 +0900
----------------------------------------------------------------------
.../log4j/core/pattern/MapPatternConverter.java | 17 +++++++++--------
.../logging/log4j/core/GcFreeLoggingTestUtil.java | 3 ++-
log4j-core/src/test/resources/gcFreeLogging.xml | 6 +++---
.../test/resources/gcFreeMixedSyncAsyncLogging.xml | 6 +++---
4 files changed, 17 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39dbbc98/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
index a91b8dd..19b7823 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java
@@ -23,6 +23,9 @@ import java.util.TreeSet;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.message.MapMessage;
+import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
+import org.apache.logging.log4j.util.StringMap;
+import org.apache.logging.log4j.util.TriConsumer;
/**
* Able to handle the contents of the LogEvent's MapMessage and either
@@ -69,28 +72,26 @@ public final class MapPatternConverter extends LogEventPatternConverter {
} else {
return;
}
- final Map<String, String> map = msg.getData();
+ final IndexedReadOnlyStringMap sortedMap = msg.getIndexedReadOnlyStringMap();
// if there is no additional options, we output every single
// Key/Value pair for the Map in a similar format to Hashtable.toString()
if (key == null) {
- if (map.isEmpty()) {
+ if (sortedMap.isEmpty()) {
toAppendTo.append("{}");
return;
}
- final StringBuilder sb = new StringBuilder("{");
- final Set<String> keys = new TreeSet<>(map.keySet());
- for (final String eventKey : keys) {
+ final StringBuilder sb = toAppendTo.append("{");
+ for (int i = 0; i < sortedMap.size(); i++) {
if (sb.length() > 1) {
sb.append(", ");
}
- sb.append(eventKey).append('=').append(map.get(eventKey));
-
+ sb.append(sortedMap.getKeyAt(i)).append('=').append(sortedMap.getValueAt(i));
}
sb.append('}');
toAppendTo.append(sb);
} else {
// otherwise they just want a single key output
- final String val = map.get(key);
+ final String val = sortedMap.getValue(key);
if (val != null) {
toAppendTo.append(val);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39dbbc98/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
index 584ba37..7c4abd1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
@@ -70,6 +70,7 @@ public class GcFreeLoggingTestUtil {
logger.fatal(test, "This message is logged to the console");
logger.error("Sample error message");
logger.error("Test parameterized message {}", "param");
+ logger.error(new MapMessage().with("eventId", "Login")); // initialize GelfLayout's messageStringBuilder
for (int i = 0; i < 256; i++) {
logger.debug("ensure all ringbuffer slots have been used once"); // allocate MutableLogEvent.messageText
}
@@ -120,7 +121,7 @@ public class GcFreeLoggingTestUtil {
logger.error("Test parameterized message {}", "param");
logger.error("Test parameterized message {}{}", "param", "param2");
logger.error("Test parameterized message {}{}{}", "param", "param2", "abc");
- //logger.error(mapMessage); // TODO LOG4J2-1683
+ logger.error(mapMessage); // LOG4J2-1683
ThreadContext.remove("aKey");
ThreadContext.put("aKey", "value1");
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39dbbc98/log4j-core/src/test/resources/gcFreeLogging.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/gcFreeLogging.xml b/log4j-core/src/test/resources/gcFreeLogging.xml
index 0e17663..1d792a1 100644
--- a/log4j-core/src/test/resources/gcFreeLogging.xml
+++ b/log4j-core/src/test/resources/gcFreeLogging.xml
@@ -27,14 +27,14 @@
<File name="File" fileName="target/gcfreefile.log" bufferedIO="false">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{DEFAULT}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %equals{%markerSimpleName}{test}{substitute} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
+ <Pattern>%d{DEFAULT}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %equals{%markerSimpleName}{test}{substitute} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
</PatternLayout>
</File>
<RollingFile name="RollingFile" fileName="target/gcfreeRollingFile.log"
filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
+ <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50M" />
@@ -43,7 +43,7 @@
<RandomAccessFile name="RandomAccessFile" fileName="target/gcfreeRAF.log" immediateFlush="false" append="false">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern>
+ <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern>
</PatternLayout>
</RandomAccessFile>
<RollingRandomAccessFile name="RollingRandomAccessFile"
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39dbbc98/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
index b9ea5b2..989048b 100644
--- a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
+++ b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
@@ -27,14 +27,14 @@
<File name="File" fileName="target/gcfreefileMixed.log" bufferedIO="false">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %equals{%markerSimpleName}{test}{substitute} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
+ <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %equals{%markerSimpleName}{test}{substitute} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
</PatternLayout>
</File>
<RollingFile name="RollingFile" fileName="target/gcfreeRollingFileMixed.log"
filePattern="target/gcfree-%d{MM-dd-yy-HH-mm-ss}.log.gz">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
+ <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %p %c{1.} [%t] %m%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %m%n}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50M" />
@@ -43,7 +43,7 @@
<RandomAccessFile name="RandomAccessFile" fileName="target/gcfreeRAFMixed.log" immediateFlush="false" append="false">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout>
- <Pattern>%d{DEFAULT}{UTC} %r %sn %markerSimpleName %maxLen{%marker}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern>
+ <Pattern>%d{DEFAULT}{UTC} %r %sn %markerSimpleName %MAP %maxLen{%marker}{10} %p %c{1.} [%t] %X{aKey} %m %ex%n %highlight{%style{%d}{bright,cyan} %p %c{1.} [%t] %X{aKey} %m %ex%n}</Pattern>
</PatternLayout>
</RandomAccessFile>
<RollingRandomAccessFile name="RollingRandomAccessFile"