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 2014/09/15 15:35:33 UTC
git commit: [LOG4J2-428] Implement a GELF layout. Refactor
compression type enum to make it create the deflator stream,
which avoid a switch in the layout,
a bit more OO. Also test ZLIB compression and no compression.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 837e0aa18 -> a121ae06c
[LOG4J2-428] Implement a GELF layout. Refactor compression type enum to
make it create the deflator stream, which avoid a switch in the layout,
a bit more OO. Also test ZLIB compression and no compression.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a121ae06
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a121ae06
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a121ae06
Branch: refs/heads/master
Commit: a121ae06c97e18fd945eb615af87fcb676a52523
Parents: 837e0aa
Author: Gary Gregory <ga...@gmail.com>
Authored: Mon Sep 15 09:35:28 2014 -0400
Committer: Gary Gregory <ga...@gmail.com>
Committed: Mon Sep 15 09:35:28 2014 -0400
----------------------------------------------------------------------
.../logging/log4j/core/layout/GelfLayout.java | 38 +++++++++++-----
.../plugins/convert/TypeConvertersTest.java | 2 +
.../log4j/core/layout/GelfLayoutTest.java | 46 +++++++++++++++++---
3 files changed, 67 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a121ae06/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 c2d9c99..e99e34d 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
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.layout;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.math.BigDecimal;
@@ -67,12 +68,32 @@ import com.fasterxml.jackson.core.io.JsonStringEncoder;
public final class GelfLayout extends AbstractStringLayout {
public static enum CompressionType {
- GZIP, NONE, ZLIB
+
+ GZIP {
+ @Override
+ public DeflaterOutputStream createDeflaterOutputStream(OutputStream os) throws IOException {
+ return new GZIPOutputStream(os);
+ }
+ },
+ ZLIB {
+ @Override
+ public DeflaterOutputStream createDeflaterOutputStream(OutputStream os) throws IOException {
+ return new DeflaterOutputStream(os);
+ }
+ },
+ OFF {
+ @Override
+ public DeflaterOutputStream createDeflaterOutputStream(OutputStream os) throws IOException {
+ return null;
+ }
+ };
+
+ public abstract DeflaterOutputStream createDeflaterOutputStream(OutputStream os) throws IOException;
+
}
private static final char C = ',';
private static final int COMPRESSION_THRESHOLD = 1024;
- private static final byte[] EMPTY_BYTES = new byte[0];
private static final char Q = '\"';
private static final String QC = "\",";
private static final String QU = "\"_";
@@ -132,15 +153,8 @@ public final class GelfLayout extends AbstractStringLayout {
private byte[] compress(final byte[] bytes) {
try {
final ByteArrayOutputStream baos = new ByteArrayOutputStream(compressionThreshold / 8);
- DeflaterOutputStream stream;
- switch (compressionType) {
- case GZIP:
- stream = new GZIPOutputStream(baos);
- break;
- case ZLIB:
- stream = new DeflaterOutputStream(baos);
- break;
- default:
+ DeflaterOutputStream stream = compressionType.createDeflaterOutputStream(baos);
+ if (stream == null) {
return bytes;
}
stream.write(bytes);
@@ -149,7 +163,7 @@ public final class GelfLayout extends AbstractStringLayout {
return baos.toByteArray();
} catch (final IOException e) {
StatusLogger.getLogger().error(e);
- return EMPTY_BYTES;
+ return bytes;
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a121ae06/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConvertersTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConvertersTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConvertersTest.java
index 7c6dfb4..39b0dd0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConvertersTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConvertersTest.java
@@ -139,6 +139,8 @@ public class TypeConvertersTest {
{ null, null, null, Facility.class },
// GELF compression types
{ "GZIP", GelfLayout.CompressionType.GZIP, "GZIP", GelfLayout.CompressionType.class },
+ { "ZLIB", GelfLayout.CompressionType.ZLIB, "GZIP", GelfLayout.CompressionType.class },
+ { "OFF", GelfLayout.CompressionType.OFF, "GZIP", GelfLayout.CompressionType.class },
// arrays
{ "123", "123".toCharArray(), null, char[].class },
{ "123", "123".getBytes(Charset.defaultCharset()), null, byte[].class },
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a121ae06/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
index 0d8dac6..edd03eb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
@@ -19,11 +19,14 @@ package org.apache.logging.log4j.core.layout;
import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals;
import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.zip.GZIPInputStream;
+import java.util.zip.InflaterInputStream;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.TaggedInputStream;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.ThreadContext;
@@ -76,15 +79,14 @@ public class GelfLayoutTest {
Logger root = ctx.getLogger("");
- @Test
- public void testLayout() throws Exception {
+ private void testCompressedLayout(final CompressionType compressionType) throws IOException {
for (final Appender appender : root.getAppenders().values()) {
root.removeAppender(appender);
}
// set up appenders
final GelfLayout layout = GelfLayout.createLayout(HOSTNAME, new KeyValuePair[] {
new KeyValuePair(KEY1, VALUE1),
- new KeyValuePair(KEY2, VALUE2), }, CompressionType.GZIP, 1024);
+ new KeyValuePair(KEY2, VALUE2), }, compressionType, 1024);
// ConsoleAppender appender = new ConsoleAppender("Console", layout);
final ListAppender eventAppender = new ListAppender("Events", null, null, true, false);
final ListAppender rawAppender = new ListAppender("Raw", null, layout, true, true);
@@ -145,12 +147,27 @@ public class GelfLayoutTest {
"\"_" + MDCKEY2 + "\": \"" + MDCVALUE2 + "\"" +
"}",
messages.get(1));
-
+ //@formatter:on
final byte[] compressed = raw.get(2);
- final InputStream gzipStream = new GZIPInputStream(new ByteArrayInputStream(compressed));
- final byte[] uncompressed = IOUtils.toByteArray(gzipStream);
- gzipStream.close();
+ final ByteArrayInputStream bais = new ByteArrayInputStream(compressed);
+ InputStream inflaterStream = null;
+ switch (compressionType) {
+ case GZIP:
+ inflaterStream = new GZIPInputStream(bais);
+ break;
+ case ZLIB:
+ inflaterStream = new InflaterInputStream(bais);
+ break;
+ case OFF:
+ inflaterStream = new TaggedInputStream(bais);
+ break;
+ default:
+ throw new IllegalStateException("Missing test case clause");
+ }
+ final byte[] uncompressed = IOUtils.toByteArray(inflaterStream);
+ inflaterStream.close();
final String uncompressedString = new String(uncompressed, layout.getCharset());
+ //@formatter:off
assertJsonEquals("{" +
"\"version\": \"1.1\"," +
"\"host\": \"" + HOSTNAME + "\"," +
@@ -169,4 +186,19 @@ public class GelfLayoutTest {
uncompressedString);
//@formatter:on
}
+
+ @Test
+ public void testLayoutGzipCompression() throws Exception {
+ testCompressedLayout(CompressionType.GZIP);
+ }
+
+ @Test
+ public void testLayoutNoCompression() throws Exception {
+ testCompressedLayout(CompressionType.OFF);
+ }
+
+ @Test
+ public void testLayoutZlibCompression() throws Exception {
+ testCompressedLayout(CompressionType.ZLIB);
+ }
}