You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2015/09/22 10:07:05 UTC

logging-log4j2 git commit: [LOG4J2-1125] Reuse StringBuilder to improve performance for PatternLayout and other String-based layouts: CSV, GELF, HTML, RFC524, Syslog.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 397a04c39 -> 875f78b81


[LOG4J2-1125] Reuse StringBuilder to improve performance for
PatternLayout and other String-based layouts: CSV, GELF, HTML, RFC524,
Syslog.

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

Branch: refs/heads/master
Commit: 875f78b81c3d1849689482998149988976e7b664
Parents: 397a04c
Author: ggregory <gg...@apache.org>
Authored: Tue Sep 22 01:07:02 2015 -0700
Committer: ggregory <gg...@apache.org>
Committed: Tue Sep 22 01:07:02 2015 -0700

----------------------------------------------------------------------
 .../apache/logging/log4j/core/layout/CsvLogEventLayout.java    | 4 +++-
 .../apache/logging/log4j/core/layout/CsvParameterLayout.java   | 4 +++-
 .../java/org/apache/logging/log4j/core/layout/GelfLayout.java  | 4 +++-
 .../java/org/apache/logging/log4j/core/layout/HtmlLayout.java  | 6 +++---
 .../org/apache/logging/log4j/core/layout/Rfc5424Layout.java    | 4 +++-
 .../org/apache/logging/log4j/core/layout/SyslogLayout.java     | 4 +++-
 6 files changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLogEventLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLogEventLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLogEventLayout.java
index a572e09..9fb36b0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLogEventLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLogEventLayout.java
@@ -42,6 +42,8 @@ public class CsvLogEventLayout extends AbstractCsvLayout {
 
     private static final long serialVersionUID = 1L;
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+    
     public static CsvLogEventLayout createDefaultLayout() {
         return new CsvLogEventLayout(Charset.forName(DEFAULT_CHARSET), CSVFormat.valueOf(DEFAULT_FORMAT), null, null);
     }
@@ -76,7 +78,7 @@ public class CsvLogEventLayout extends AbstractCsvLayout {
 
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder buffer = new StringBuilder(1024);
+        final StringBuilder buffer = prepareStringBuilder(strBuilder);
         try {
             // Revisit when 1.3 is out so that we do not need to create a new
             // printer for each event.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvParameterLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvParameterLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvParameterLayout.java
index 69c194b..bb0bc6e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvParameterLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvParameterLayout.java
@@ -51,6 +51,8 @@ public class CsvParameterLayout extends AbstractCsvLayout {
 
     private static final long serialVersionUID = 1L;
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+    
     public static AbstractCsvLayout createDefaultLayout() {
         return new CsvParameterLayout(Charset.forName(DEFAULT_CHARSET), CSVFormat.valueOf(DEFAULT_FORMAT), null, null);
     }
@@ -87,7 +89,7 @@ public class CsvParameterLayout extends AbstractCsvLayout {
     public String toSerializable(final LogEvent event) {
         final Message message = event.getMessage();
         final Object[] parameters = message.getParameters();
-        final StringBuilder buffer = new StringBuilder(1024);
+        final StringBuilder buffer = prepareStringBuilder(strBuilder);
         try {
             // Revisit when 1.3 is out so that we do not need to create a new
             // printer for each event.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 076c5c1..6433f91 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -105,6 +105,8 @@ public final class GelfLayout extends AbstractStringLayout {
     private static final long serialVersionUID = 1L;
     private static final BigDecimal TIME_DIVISOR = new BigDecimal(1000);
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+    
     @PluginFactory
     public static GelfLayout createLayout(
             //@formatter:off
@@ -190,7 +192,7 @@ public final class GelfLayout extends AbstractStringLayout {
 
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder builder = new StringBuilder(256);
+        final StringBuilder builder = prepareStringBuilder(strBuilder);
         final JsonStringEncoder jsonEncoder = JsonStringEncoder.getInstance();
         builder.append('{');
         builder.append("\"version\":\"1.1\",");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
index 873da2e..526b33a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HtmlLayout.java
@@ -51,8 +51,6 @@ public final class HtmlLayout extends AbstractStringLayout {
 
     private static final long serialVersionUID = 1L;
 
-    private static final int BUF_SIZE = 256;
-
     private static final String TRACE_PREFIX = "<br />&nbsp;&nbsp;&nbsp;&nbsp;";
 
     private static final String REGEXP = Constants.LINE_SEPARATOR.equals("\n") ? "\n" : Constants.LINE_SEPARATOR + "|\n";
@@ -65,6 +63,8 @@ public final class HtmlLayout extends AbstractStringLayout {
 
     private final long jvmStartTime = ManagementFactory.getRuntimeMXBean().getStartTime();
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+    
     // Print no location info by default
     private final boolean locationInfo;
 
@@ -131,7 +131,7 @@ public final class HtmlLayout extends AbstractStringLayout {
      */
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder sbuf = new StringBuilder(BUF_SIZE);
+        final StringBuilder sbuf = prepareStringBuilder(strBuilder);
 
         sbuf.append(Constants.LINE_SEPARATOR).append("<tr>").append(Constants.LINE_SEPARATOR);
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
index fa1d493..e062798 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/Rfc5424Layout.java
@@ -94,6 +94,8 @@ public final class Rfc5424Layout extends AbstractStringLayout {
 
     private static final String COMPONENT_KEY = "RFC5424-Converter";
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+    
     private final Facility facility;
     private final String defaultId;
     private final int enterpriseNumber;
@@ -264,7 +266,7 @@ public final class Rfc5424Layout extends AbstractStringLayout {
      */
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder buf = new StringBuilder();
+        final StringBuilder buf = prepareStringBuilder(strBuilder);
         appendPriority(buf, event.getLevel());
         appendTimestamp(buf, event.getTimeMillis());
         appendSpace(buf);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/875f78b8/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
index 661c855..350e217 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java
@@ -45,6 +45,8 @@ public final class SyslogLayout extends AbstractStringLayout {
 
     private static final long serialVersionUID = 1L;
 
+    private static ThreadLocal<StringBuilder> strBuilder = newStringBuilderThreadLocal();
+
     /**
      * Match newlines in a platform-independent manner.
      */
@@ -78,7 +80,7 @@ public final class SyslogLayout extends AbstractStringLayout {
      */
     @Override
     public String toSerializable(final LogEvent event) {
-        final StringBuilder buf = new StringBuilder();
+        final StringBuilder buf = prepareStringBuilder(strBuilder);
 
         buf.append('<');
         buf.append(Priority.getPriority(facility, event.getLevel()));