Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-1121B-ReliabilityStrategy beb9e8c3c -> 63323d586


LOG4J2-1125 PatternLayout performance improvement by caching and reusing
a ThreadLocal StringBuilder.


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

Branch: refs/heads/LOG4J2-1121B-ReliabilityStrategy
Commit: 8025bb18ce4444b76822a7965776bb075bd52aa9
Parents: 01d11a7
Author: rpopma <[email protected]>
Authored: Sun Sep 20 09:09:07 2015 +0200
Committer: rpopma <[email protected]>
Committed: Sun Sep 20 09:09:07 2015 +0200

----------------------------------------------------------------------
 .../log4j/core/layout/PatternLayout.java        | 20 +++++++++++++++-----
 src/changes/changes.xml                         |  3 +++
 2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8025bb18/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
index fb4bfcd..a8092ff 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
@@ -84,7 +84,14 @@ public final class PatternLayout extends 
AbstractStringLayout {
     /**
      * Initial converter for pattern.
      */
-    private final List<PatternFormatter> formatters;
+    private final PatternFormatter[] formatters;
+
+    private static ThreadLocal<StringBuilder> strBuilder = new 
ThreadLocal<StringBuilder>() {
+        @Override
+        protected StringBuilder initialValue() {
+            return new StringBuilder(1024);
+        }        
+    };
 
     /**
      * Conversion pattern.
@@ -127,8 +134,9 @@ public final class PatternLayout extends 
AbstractStringLayout {
         this.noConsoleNoAnsi = noConsoleNoAnsi;
         final PatternParser parser = createPatternParser(config);
         try {
-            this.formatters = parser.parse(pattern == null ? 
DEFAULT_CONVERSION_PATTERN : pattern, 
+            List<PatternFormatter> list = parser.parse(pattern == null ? 
DEFAULT_CONVERSION_PATTERN : pattern, 
                     this.alwaysWriteExceptions, this.noConsoleNoAnsi);
+            this.formatters = list.toArray(new PatternFormatter[0]);
         } catch (RuntimeException ex) {
             throw new IllegalArgumentException("Cannot parse pattern '" + 
pattern + "'", ex);
         }
@@ -189,9 +197,11 @@ public final class PatternLayout extends 
AbstractStringLayout {
      */
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder buf = new StringBuilder(1024);
-        for (final PatternFormatter formatter : formatters) {
-            formatter.format(event, buf);
+        final StringBuilder buf = strBuilder.get();
+        buf.setLength(0);
+        final int len = formatters.length;
+        for (int i = 0; i < len; i++) {
+            formatters[i].format(event, buf);
         }
         String str = buf.toString();
         if (replace != null) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8025bb18/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 3779165..2266565 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -63,6 +63,9 @@
       <action issue="LOG4J2-1120" dev="rpopma" type="update">
         LoggerConfig performance improvements: avoid unnecessary lock 
acquisition, use more efficient data structure.
       </action>
+      <action issue="LOG4J2-1125" dev="rpopma" type="update">
+        PatternLayout performance improvement by caching and reusing a 
ThreadLocal StringBuilder.
+      </action>
       <action issue="LOG4J2-1114" dev="ggregory" type="update">
         Add thread name to status logger layout.
       </action>

Reply via email to