[LOG4J2-1385] (GC) CSV layouts should not create a new CSVPrinter for each log event.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4471c511 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4471c511 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4471c511 Branch: refs/heads/LOG4J-1181 Commit: 4471c511f1280fe9cd2010ddf71e4614f80c5d97 Parents: 1ff244f Author: ggregory <ggreg...@apache.org> Authored: Sun May 29 11:46:13 2016 -0700 Committer: ggregory <ggreg...@apache.org> Committed: Sun May 29 11:46:13 2016 -0700 ---------------------------------------------------------------------- .../log4j/core/layout/CsvLogEventLayout.java | 35 ++++++++++---------- .../log4j/core/layout/CsvParameterLayout.java | 6 ++-- src/changes/changes.xml | 3 ++ 3 files changed, 23 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4471c511/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 12e0f3d..5077987 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 @@ -80,26 +80,27 @@ public class CsvLogEventLayout extends AbstractCsvLayout { final StringBuilder buffer = getStringBuilder(); // Revisit when 1.3 is out so that we do not need to create a new // printer for each event. - try (final CSVPrinter printer = new CSVPrinter(buffer, getFormat())) { - printer.print(event.getNanoTime()); - printer.print(event.getTimeMillis()); - printer.print(event.getLevel()); - printer.print(event.getThreadId()); - printer.print(event.getThreadName()); - printer.print(event.getThreadPriority()); - printer.print(event.getMessage().getFormattedMessage()); - printer.print(event.getLoggerFqcn()); - printer.print(event.getLoggerName()); - printer.print(event.getMarker()); - printer.print(event.getThrownProxy()); - printer.print(event.getSource()); - printer.print(event.getContextMap()); - printer.print(event.getContextStack()); - printer.println(); + final CSVFormat format = getFormat(); + try { + format.print(event.getNanoTime(), buffer, true); + format.print(event.getTimeMillis(), buffer, false); + format.print(event.getLevel(), buffer, false); + format.print(event.getThreadId(), buffer, false); + format.print(event.getThreadName(), buffer, false); + format.print(event.getThreadPriority(), buffer, false); + format.print(event.getMessage().getFormattedMessage(), buffer, false); + format.print(event.getLoggerFqcn(), buffer, false); + format.print(event.getLoggerName(), buffer, false); + format.print(event.getMarker(), buffer, false); + format.print(event.getThrownProxy(), buffer, false); + format.print(event.getSource(), buffer, false); + format.print(event.getContextMap(), buffer, false); + format.print(event.getContextStack(), buffer, false); + format.println(buffer); return buffer.toString(); } catch (final IOException e) { StatusLogger.getLogger().error(event.toString(), e); - return getFormat().getCommentMarker() + " " + e; + return format.getCommentMarker() + " " + e; } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4471c511/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 dcae328..3ddc172 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 @@ -89,10 +89,8 @@ public class CsvParameterLayout extends AbstractCsvLayout { final Message message = event.getMessage(); final Object[] parameters = message.getParameters(); final StringBuilder buffer = getStringBuilder(); - // Revisit when 1.3 is out so that we do not need to create a new - // printer for each event. - try (final CSVPrinter printer = new CSVPrinter(buffer, getFormat())) { - printer.printRecord(parameters); + try { + getFormat().printRecord(buffer, parameters); return buffer.toString(); } catch (final IOException e) { StatusLogger.getLogger().error(message, e); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4471c511/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 4c5268c..1724b0d 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -24,6 +24,9 @@ </properties> <body> <release version="2.6.1" date="2016-MM-DD" description="GA Release 2.6.1"> + <action issue="LOG4J2-1385" dev="ggregory" type="update"> + (GC) CSV layouts should not create a new CSVPrinter for each log event. + </action> <action issue="LOG4J2-1398" dev="ggregory" type="update"> Update liquibase-core from 3.4.2 to 3.5.1. </action>