Repository: logging-log4j2
Updated Branches:
  refs/heads/master a720c1e6a -> 177a66a29


[LOG4J2-428] Add ZLIB compression support.

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

Branch: refs/heads/master
Commit: 177a66a294979d809ca8cc01fe89590900ce451c
Parents: a720c1e
Author: Gary Gregory <garydgreg...@gmail.com>
Authored: Thu Sep 11 13:16:47 2014 -0400
Committer: Gary Gregory <garydgreg...@gmail.com>
Committed: Thu Sep 11 13:16:47 2014 -0400

----------------------------------------------------------------------
 .../config/plugins/util/TypeConverters.java     |  5 +++-
 .../logging/log4j/core/layout/GelfLayout.java   | 27 +++++++++++++++++---
 .../config/plugins/util/TypeConvertersTest.java |  3 +++
 .../log4j/core/layout/GelfLayoutTest.java       |  3 ++-
 4 files changed, 33 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/177a66a2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java
index c82074e..0fc2353 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/TypeConverters.java
@@ -36,6 +36,7 @@ import javax.xml.bind.DatatypeConverter;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.layout.GelfLayout;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.net.Facility;
 import org.apache.logging.log4j.core.net.Protocol;
@@ -336,7 +337,7 @@ public final class TypeConverters {
         }
         if (s == null) {
             // don't debug print here, resulting output is hard to understand
-            //LOGGER.debug("Null string given to convert. Using default 
[{}].", defaultValue);
+            // LOGGER.debug("Null string given to convert. Using default 
[{}].", defaultValue);
             return parseDefaultValue(converter, defaultValue);
         }
         try {
@@ -437,6 +438,8 @@ public final class TypeConverters {
         registry.put(Filter.Result.class, new 
EnumConverter<Filter.Result>(Filter.Result.class));
         registry.put(Facility.class, new 
EnumConverter<Facility>(Facility.class));
         registry.put(Protocol.class, new 
EnumConverter<Protocol>(Protocol.class));
+        registry.put(GelfLayout.CompressionType.class, new 
EnumConverter<GelfLayout.CompressionType>(
+                GelfLayout.CompressionType.class));
         registry.put(HtmlLayout.FontSize.class, new 
EnumConverter<HtmlLayout.FontSize>(HtmlLayout.FontSize.class));
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/177a66a2/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 78d3293..14561f8 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
@@ -23,6 +23,7 @@ import java.io.StringWriter;
 import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.Map;
+import java.util.zip.DeflaterOutputStream;
 import java.util.zip.GZIPOutputStream;
 
 import org.apache.logging.log4j.Level;
@@ -62,6 +63,10 @@ import org.apache.logging.log4j.status.StatusLogger;
 @Plugin(name = "GelfLayout", category = "Core", elementType = "layout", 
printObject = true)
 public final class GelfLayout extends AbstractStringLayout {
 
+    public static enum CompressionType {
+        GZIP, ZLIB, NONE
+    }
+
     private static final byte[] EMPTY_BYTES = new byte[0];
     private static final char C = ',';
     private static final int COMPRESSION_THRESHOLD = 1024;
@@ -77,9 +82,11 @@ public final class GelfLayout extends AbstractStringLayout {
             @PluginAttribute("host") final String host,
             @PluginElement("AdditionalField") final KeyValuePair[] 
additionalFields,
             @PluginAttribute(value = "compressionThreshold", 
+                defaultString = "GZIP") final CompressionType compressionType,
+            @PluginAttribute(value = "compressionThreshold", 
                 defaultInt= COMPRESSION_THRESHOLD) final int 
compressionThreshold) {
             // @formatter:on
-        return new GelfLayout(host, additionalFields, compressionThreshold);
+        return new GelfLayout(host, additionalFields, compressionType, 
compressionThreshold);
     }
 
     static String formatTimestamp(final long timeMillis) {
@@ -92,17 +99,31 @@ public final class GelfLayout extends AbstractStringLayout {
 
     private final int compressionThreshold;
 
-    public GelfLayout(final String host, final KeyValuePair[] 
additionalFields, final int compressionThreshold) {
+    private CompressionType compressionType;
+
+    public GelfLayout(final String host, final KeyValuePair[] 
additionalFields, CompressionType compressionType,
+            final int compressionThreshold) {
         super(Charsets.UTF_8);
         this.host = host;
         this.additionalFields = additionalFields;
+        this.compressionType = compressionType;
         this.compressionThreshold = compressionThreshold;
     }
 
     private byte[] compress(final byte[] bytes) {
         try {
             final ByteArrayOutputStream baos = new 
ByteArrayOutputStream(compressionThreshold / 8);
-            final GZIPOutputStream stream = new GZIPOutputStream(baos);
+            DeflaterOutputStream stream;
+            switch (compressionType) {
+            case GZIP:
+                stream = new GZIPOutputStream(baos);
+                break;
+            case ZLIB:
+                stream = new DeflaterOutputStream(baos);
+                break;
+            default:
+                return bytes;
+            }
             stream.write(bytes);
             stream.finish();
             stream.close();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/177a66a2/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/TypeConvertersTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/TypeConvertersTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/TypeConvertersTest.java
index a93a7ca..061817b 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/TypeConvertersTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/TypeConvertersTest.java
@@ -33,6 +33,7 @@ import java.util.Collection;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.layout.GelfLayout;
 import org.apache.logging.log4j.core.net.Facility;
 import org.apache.logging.log4j.core.util.Charsets;
 import org.junit.Test;
@@ -137,6 +138,8 @@ public class TypeConvertersTest {
                 { "Cron", Facility.CRON, null, Facility.class },
                 { "not a real facility", Facility.AUTH, "auth", Facility.class 
},
                 { null, null, null, Facility.class },
+                // GELF compression types
+                { "GZIP", GelfLayout.CompressionType.GZIP, "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/177a66a2/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 dcedc01..207d1b6 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
@@ -21,6 +21,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.*;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.core.layout.GelfLayout.CompressionType;
 import org.apache.logging.log4j.core.util.KeyValuePair;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.junit.AfterClass;
@@ -72,7 +73,7 @@ public class GelfLayoutTest {
         // set up appender
         final GelfLayout layout = GelfLayout.createLayout(HOSTNAME, new 
KeyValuePair[] {
                 new KeyValuePair(KEY1, VALUE1),
-                new KeyValuePair(KEY2, VALUE2), }, 1024);
+                new KeyValuePair(KEY2, VALUE2), }, CompressionType.GZIP, 1024);
         // ConsoleAppender appender = new ConsoleAppender("Console", layout);
         final ListAppender eventAppender = new ListAppender("Events", null, 
null, true, false);
         final ListAppender appender = new ListAppender("Layouted", null, 
layout, true, false);

Reply via email to