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 <[email protected]> Authored: Tue Sep 22 01:07:02 2015 -0700 Committer: ggregory <[email protected]> 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 /> "; 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()));
