Repository: logging-log4j2
Updated Branches:
  refs/heads/master d52b9b542 -> 4ab1f4c13


[LOG4J2-1088] Add Comma Separated Value (CSV) layouts for parameter and
event logging. Clean up messes.

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

Branch: refs/heads/master
Commit: 4ab1f4c130e4fb62a46212b7469f24a87bfaaee4
Parents: d52b9b5
Author: ggregory <[email protected]>
Authored: Mon Sep 7 23:15:12 2015 -0700
Committer: ggregory <[email protected]>
Committed: Mon Sep 7 23:15:12 2015 -0700

----------------------------------------------------------------------
 .../log4j/core/layout/AbstractCsvLayout.java    | 70 ++++++++++++++
 .../logging/log4j/core/layout/CsvLayout.java    | 97 --------------------
 .../log4j/core/layout/CsvLogEventLayout.java    |  6 +-
 .../log4j/core/layout/CsvParameterLayout.java   | 10 +-
 .../core/layout/CsvLogEventLayoutTest.java      | 10 +-
 .../core/layout/CsvParameterLayoutTest.java     | 10 +-
 6 files changed, 90 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
new file mode 100644
index 0000000..9c29ef1
--- /dev/null
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractCsvLayout.java
@@ -0,0 +1,70 @@
+package org.apache.logging.log4j.core.layout;
+
+import java.nio.charset.Charset;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.QuoteMode;
+
+/**
+ * A Comma-Separated Value (CSV) layout.
+ * 
+ * <p>
+ * Best used with:
+ * </p>
+ * <p>
+ * {@code logger.debug(new ObjectArrayMessage(1, 2, "Bob"));}
+ * </p>
+ * 
+ * Depends on Apache Commons CSV 1.2.
+ * 
+ * @since 2.4
+ */
+public abstract class AbstractCsvLayout extends AbstractStringLayout {
+
+    private static final String CONTENT_TYPE = "text/csv";
+    protected static final String DEFAULT_CHARSET = "UTF-8";
+    protected static final String DEFAULT_FORMAT = "Default";
+    private static final long serialVersionUID = 1L;
+
+    protected static CSVFormat createFormat(final String format, final 
Character delimiter, final Character escape, final Character quote, final 
QuoteMode quoteMode, final String nullString,
+            final String recordSeparator) {
+                CSVFormat csvFormat = CSVFormat.valueOf(format);
+                if (delimiter != null) {
+                    csvFormat = csvFormat.withDelimiter(delimiter);
+                }
+                if (escape != null) {
+                    csvFormat = csvFormat.withEscape(escape);
+                }
+                if (quote != null) {
+                    csvFormat = csvFormat.withQuote(quote);
+                }
+                if (quoteMode != null) {
+                    csvFormat = csvFormat.withQuoteMode(quoteMode);
+                }
+                if (nullString != null) {
+                    csvFormat = csvFormat.withNullString(nullString);
+                }
+                if (recordSeparator != null) {
+                    csvFormat = csvFormat.withRecordSeparator(recordSeparator);
+                }
+                return csvFormat;
+            }
+
+    private final CSVFormat format;
+
+    protected AbstractCsvLayout(final Charset charset, final CSVFormat 
csvFormat, final String header,
+            final String footer) {
+        super(charset, toBytes(header, charset), toBytes(footer, charset));
+        this.format = csvFormat;
+    }
+
+    @Override
+    public String getContentType() {
+        return CONTENT_TYPE + "; charset=" + this.getCharset();
+    }
+
+    public CSVFormat getFormat() {
+        return format;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLayout.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLayout.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLayout.java
deleted file mode 100644
index 67da734..0000000
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/CsvLayout.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.apache.logging.log4j.core.layout;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-import org.apache.commons.csv.CSVFormat;
-import org.apache.commons.csv.CSVPrinter;
-import org.apache.commons.csv.QuoteMode;
-import org.apache.logging.log4j.core.Layout;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.config.Node;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.message.Message;
-import org.apache.logging.log4j.status.StatusLogger;
-
-/**
- * A Comma-Separated Value (CSV) layout.
- * 
- * <p>
- * Best used with:
- * </p>
- * <p>
- * {@code logger.debug(new ObjectArrayMessage(1, 2, "Bob"));}
- * </p>
- * 
- * Depends on Apache Commons CSV 1.2.
- * 
- * @since 2.4
- */
-@Plugin(name = "CsvLayout", category = Node.CATEGORY, elementType = 
Layout.ELEMENT_TYPE, printObject = true)
-public class CsvLayout extends AbstractStringLayout {
-
-    private static final String CONTENT_TYPE = "text/csv";
-    protected static final String DEFAULT_CHARSET = "UTF-8";
-    protected static final String DEFAULT_FORMAT = "Default";
-    private static final long serialVersionUID = 1L;
-
-    protected static CSVFormat createFormat(final String format, final 
Character delimiter, final Character escape, final Character quote, final 
QuoteMode quoteMode, final String nullString,
-            final String recordSeparator) {
-                CSVFormat csvFormat = CSVFormat.valueOf(format);
-                if (delimiter != null) {
-                    csvFormat = csvFormat.withDelimiter(delimiter);
-                }
-                if (escape != null) {
-                    csvFormat = csvFormat.withEscape(escape);
-                }
-                if (quote != null) {
-                    csvFormat = csvFormat.withQuote(quote);
-                }
-                if (quoteMode != null) {
-                    csvFormat = csvFormat.withQuoteMode(quoteMode);
-                }
-                if (nullString != null) {
-                    csvFormat = csvFormat.withNullString(nullString);
-                }
-                if (recordSeparator != null) {
-                    csvFormat = csvFormat.withRecordSeparator(recordSeparator);
-                }
-                return csvFormat;
-            }
-
-    private final CSVFormat format;
-
-    protected CsvLayout(final Charset charset, final CSVFormat csvFormat, 
final String header,
-            final String footer) {
-        super(charset, toBytes(header, charset), toBytes(footer, charset));
-        this.format = csvFormat;
-    }
-
-    @Override
-    public String getContentType() {
-        return CONTENT_TYPE + "; charset=" + this.getCharset();
-    }
-
-    public CSVFormat getFormat() {
-        return format;
-    }
-
-    @Override
-    public String toSerializable(final LogEvent event) {
-        final Message message = event.getMessage();
-        final Object[] parameters = message.getParameters();
-        final StringBuilder buffer = new StringBuilder(1024);
-        try {
-            // Revisit when 1.3 is out so that we do not need to create a new
-            // printer for each event.
-            // No need to close the printer.
-            final CSVPrinter printer = new CSVPrinter(buffer, getFormat());
-            printer.printRecord(parameters);
-            return buffer.toString();
-        } catch (final IOException e) {
-            StatusLogger.getLogger().error(message, e);
-            return getFormat().getCommentMarker() + " " + e;
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/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 7be65d6..bee5eed 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
@@ -6,12 +6,16 @@ import java.nio.charset.Charset;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
 import org.apache.commons.csv.QuoteMode;
+import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.status.StatusLogger;
 
-public class CsvLogEventLayout extends CsvLayout {
+@Plugin(name = "CsvLogEventLayout", category = Node.CATEGORY, elementType = 
Layout.ELEMENT_TYPE, printObject = true)
+public class CsvLogEventLayout extends AbstractCsvLayout {
 
     /**
      * 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/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 09d1ef1..338049b 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
@@ -30,21 +30,21 @@ import org.apache.logging.log4j.status.StatusLogger;
  * 
  * @since 2.4
  */
-@Plugin(name = "CsvLayout", category = Node.CATEGORY, elementType = 
Layout.ELEMENT_TYPE, printObject = true)
-public class CsvParameterLayout extends CsvLayout {
+@Plugin(name = "CsvParameterLayout", category = Node.CATEGORY, elementType = 
Layout.ELEMENT_TYPE, printObject = true)
+public class CsvParameterLayout extends AbstractCsvLayout {
 
     private static final long serialVersionUID = 1L;
 
-    public static CsvLayout createDefaultLayout() {
+    public static AbstractCsvLayout createDefaultLayout() {
         return new CsvParameterLayout(Charset.forName(DEFAULT_CHARSET), 
CSVFormat.valueOf(DEFAULT_FORMAT), null, null);
     }
 
-    public static CsvLayout createLayout(final CSVFormat format) {
+    public static AbstractCsvLayout createLayout(final CSVFormat format) {
         return new CsvParameterLayout(Charset.forName(DEFAULT_CHARSET), 
format, null, null);
     }
 
     @PluginFactory
-    public static CsvLayout createLayout(
+    public static AbstractCsvLayout createLayout(
             // @formatter:off
             @PluginAttribute(value = "format", defaultString = DEFAULT_FORMAT) 
final String format,
             @PluginAttribute("delimiter") final Character delimiter,

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvLogEventLayoutTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvLogEventLayoutTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvLogEventLayoutTest.java
index 4df936e..f0f6d95 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvLogEventLayoutTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvLogEventLayoutTest.java
@@ -37,7 +37,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
- * Tests {@link CsvLayout}.
+ * Tests {@link AbstractCsvLayout}.
  *
  * @since 2.4
  */
@@ -64,25 +64,25 @@ public class CsvLogEventLayoutTest {
 
     @Test
     public void testCustomCharset() {
-        final CsvLayout layout = CsvLogEventLayout.createLayout("Excel", null, 
null, null, null, null, null,
+        final AbstractCsvLayout layout = 
CsvLogEventLayout.createLayout("Excel", null, null, null, null, null, null,
                 StandardCharsets.UTF_16, null, null);
         assertEquals("text/csv; charset=UTF-16", layout.getContentType());
     }
 
     @Test
     public void testDefaultCharset() {
-        final CsvLayout layout = CsvLogEventLayout.createDefaultLayout();
+        final AbstractCsvLayout layout = 
CsvLogEventLayout.createDefaultLayout();
         assertEquals(StandardCharsets.UTF_8, layout.getCharset());
     }
 
     @Test
     public void testDefaultContentType() {
-        final CsvLayout layout = CsvLogEventLayout.createDefaultLayout();
+        final AbstractCsvLayout layout = 
CsvLogEventLayout.createDefaultLayout();
         assertEquals("text/csv; charset=UTF-8", layout.getContentType());
     }
 
     private void testLayout(final CSVFormat format) {
-        final CsvLayout layout = CsvLogEventLayout.createLayout(format);
+        final AbstractCsvLayout layout = 
CsvLogEventLayout.createLayout(format);
         final Map<String, Appender> appenders = root.getAppenders();
         for (final Appender appender : appenders.values()) {
             root.removeAppender(appender);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ab1f4c1/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java
index d9a04c5..0bbe3c6 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java
@@ -38,7 +38,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
- * Tests {@link CsvLayout}.
+ * Tests {@link AbstractCsvLayout}.
  *
  * @since 2.4
  */
@@ -65,24 +65,24 @@ public class CsvParameterLayoutTest {
 
     @Test
     public void testCustomCharset() {
-        final CsvLayout layout = CsvParameterLayout.createLayout("Excel", 
null, null, null, null, null, null,
+        final AbstractCsvLayout layout = 
CsvParameterLayout.createLayout("Excel", null, null, null, null, null, null,
                 StandardCharsets.UTF_16, null, null);
         assertEquals("text/csv; charset=UTF-16", layout.getContentType());
     }
 
     @Test
     public void testDefaultCharset() {
-        final CsvLayout layout = CsvParameterLayout.createDefaultLayout();
+        final AbstractCsvLayout layout = 
CsvParameterLayout.createDefaultLayout();
         assertEquals(StandardCharsets.UTF_8, layout.getCharset());
     }
 
     @Test
     public void testDefaultContentType() {
-        final CsvLayout layout = CsvParameterLayout.createDefaultLayout();
+        final AbstractCsvLayout layout = 
CsvParameterLayout.createDefaultLayout();
         assertEquals("text/csv; charset=UTF-8", layout.getContentType());
     }
 
-    private void testLayoutNormalApi(final CsvLayout layout, boolean 
messageApi) throws Exception {
+    private void testLayoutNormalApi(final AbstractCsvLayout layout, boolean 
messageApi) throws Exception {
         final Map<String, Appender> appenders = root.getAppenders();
         for (final Appender appender : appenders.values()) {
             root.removeAppender(appender);

Reply via email to