From 7d916f4f08792eb212d61dcde9e0a6b771ac8753 Mon Sep 17 00:00:00 2001 From: Anurag Agarwal Date: Wed, 14 Jun 2023 14:31:29 +0530 Subject: [PATCH 1/4] Include zstd compression --- .../core/appender/rolling/FileExtension.java | 17 +++++++++++++---- .../rolling/action/CommonsCompressAction.java | 6 +++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java index d3d03e6483e..7259d7f44ab 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java @@ -19,6 +19,7 @@ import java.io.File; import java.util.Objects; +import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.logging.log4j.core.appender.rolling.action.Action; import org.apache.logging.log4j.core.appender.rolling.action.CommonsCompressAction; import org.apache.logging.log4j.core.appender.rolling.action.GzCompressAction; @@ -46,7 +47,7 @@ Action createCompressAction(final String renameTo, final String compressedName, @Override Action createCompressAction(final String renameTo, final String compressedName, final boolean deleteSource, final int compressionLevel) { - // One of "gz", "bzip2", "xz", "pack200", or "deflate". + // One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". return new CommonsCompressAction("bzip2", source(renameTo), target(compressedName), deleteSource); } }, @@ -54,7 +55,7 @@ Action createCompressAction(final String renameTo, final String compressedName, @Override Action createCompressAction(final String renameTo, final String compressedName, final boolean deleteSource, final int compressionLevel) { - // One of "gz", "bzip2", "xz", "pack200", or "deflate". + // One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". return new CommonsCompressAction("deflate", source(renameTo), target(compressedName), deleteSource); } }, @@ -62,7 +63,7 @@ Action createCompressAction(final String renameTo, final String compressedName, @Override Action createCompressAction(final String renameTo, final String compressedName, final boolean deleteSource, final int compressionLevel) { - // One of "gz", "bzip2", "xz", "pack200", or "deflate". + // One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". return new CommonsCompressAction("pack200", source(renameTo), target(compressedName), deleteSource); } }, @@ -70,9 +71,17 @@ Action createCompressAction(final String renameTo, final String compressedName, @Override Action createCompressAction(final String renameTo, final String compressedName, final boolean deleteSource, final int compressionLevel) { - // One of "gz", "bzip2", "xz", "pack200", or "deflate". + // One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". return new CommonsCompressAction("xz", source(renameTo), target(compressedName), deleteSource); } + }, + ZSTD(".zst") { + @Override + Action createCompressAction(final String renameTo, final String compressedName, final boolean deleteSource, + final int compressionLevel) { + // One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". + return new CommonsCompressAction("zstd", source(renameTo), target(compressedName), deleteSource); + } }; public static FileExtension lookup(final String fileExtension) { diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CommonsCompressAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CommonsCompressAction.java index 675bed0a027..f74402fa751 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CommonsCompressAction.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CommonsCompressAction.java @@ -36,7 +36,7 @@ public final class CommonsCompressAction extends AbstractAction { private static final int BUF_SIZE = 8192; /** - * Compressor name. One of "gz", "bzip2", "xz", "pack200" or "deflate". + * Compressor name. One of "gz", "bzip2", "xz", "zstd", "pack200" or "deflate". */ private final String name; @@ -58,7 +58,7 @@ public final class CommonsCompressAction extends AbstractAction { /** * Creates new instance of Bzip2CompressAction. * - * @param name the compressor name. One of "gz", "bzip2", "xz", "pack200", or "deflate". + * @param name the compressor name. One of "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". * @param source file to compress, may not be null. * @param destination compressed file, may not be null. * @param deleteSource if true, attempt to delete file on completion. Failure to delete does not cause an exception @@ -88,7 +88,7 @@ public boolean execute() throws IOException { /** * Compresses a file. * - * @param name the compressor name, i.e. "gz", "bzip2", "xz", "pack200", or "deflate". + * @param name the compressor name, i.e. "gz", "bzip2", "xz", "zstd", "pack200", or "deflate". * @param source file to compress, may not be null. * @param destination compressed file, may not be null. * @param deleteSource if true, attempt to delete file on completion. Failure to delete does not cause an exception From b69420a610ee2c0a554b4a6aa5900268681f8d7f Mon Sep 17 00:00:00 2001 From: Anurag Agarwal Date: Wed, 14 Jun 2023 14:37:32 +0530 Subject: [PATCH 2/4] Updates documentation --- src/site/xdoc/manual/appenders.xml | 10 +++++++--- src/site/xdoc/runtime-dependencies.xml | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml index 51221220589..e80cc0a4fc2 100644 --- a/src/site/xdoc/manual/appenders.xml +++ b/src/site/xdoc/manual/appenders.xml @@ -3322,10 +3322,14 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity { is present it will be replaced with the current date and time values. If the pattern contains an integer it will be incremented on each rollover. If the pattern contains both a date/time and integer in the pattern the integer will be incremented until the result of the date/time pattern changes. If - the file pattern ends with ".gz", ".zip", ".bz2", ".deflate", ".pack200", or ".xz" the resulting archive + the file pattern ends with ".gz", ".zip", ".bz2", ".deflate", ".pack200", "zstd" or ".xz" the resulting archive will be compressed using the compression scheme that matches the suffix. The formats bzip2, Deflate, - Pack200 and XZ require Apache Commons Compress. - In addition, XZ requires XZ for Java. + Pack200, ZSTD and XZ require Apache Commons Compress. + In addition: + The pattern may also contain lookup references that can be resolved at runtime such as is shown in the example below.

diff --git a/src/site/xdoc/runtime-dependencies.xml b/src/site/xdoc/runtime-dependencies.xml index af18291407e..3d221aa3ca2 100644 --- a/src/site/xdoc/runtime-dependencies.xml +++ b/src/site/xdoc/runtime-dependencies.xml @@ -280,7 +280,9 @@ Bzip2, Deflate, Pack200, and XZ compression on rollover Apache Commons Compress. - In addition, XZ requires XZ for Java. + In addition, + XZ requires XZ for Java. + ZSTD requires JNI binding for Zstd. From b91ab92b93b063fe274c83a651618b7852167374 Mon Sep 17 00:00:00 2001 From: Anurag Agarwal Date: Wed, 14 Jun 2023 14:46:05 +0530 Subject: [PATCH 3/4] Adds test cases for zstd compression --- log4j-core-test/pom.xml | 5 ++ .../rolling/RollingAppenderSizeTest.java | 2 + .../resources/log4j-rolling-zstd-lazy.xml | 59 +++++++++++++++++++ .../src/test/resources/log4j-rolling-zstd.xml | 58 ++++++++++++++++++ pom.xml | 7 +++ src/site/xdoc/runtime-dependencies.xml | 8 ++- 6 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 log4j-core-test/src/test/resources/log4j-rolling-zstd-lazy.xml create mode 100644 log4j-core-test/src/test/resources/log4j-rolling-zstd.xml diff --git a/log4j-core-test/pom.xml b/log4j-core-test/pom.xml index a9489a0672d..9cb99e300ae 100644 --- a/log4j-core-test/pom.xml +++ b/log4j-core-test/pom.xml @@ -328,6 +328,11 @@ xz test + + com.github.luben + zstd-jni + test + diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java index c7700eccbe3..99b710cd6da 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java @@ -83,6 +83,8 @@ public static Collection data() { {"log4j-rolling-bzip2.xml", ".bz2", false}, {"log4j-rolling-deflate-lazy.xml", ".deflate", true}, {"log4j-rolling-deflate.xml", ".deflate", false}, + {"log4j-rolling-zstd-lazy.xml", ".zst", true}, + {"log4j-rolling-zstd.xml", ".zst", false}, {"log4j-rolling-pack200-lazy.xml", ".pack200", true}, {"log4j-rolling-pack200.xml", ".pack200", false}, {"log4j-rolling-xz-lazy.xml", ".xz", true}, diff --git a/log4j-core-test/src/test/resources/log4j-rolling-zstd-lazy.xml b/log4j-core-test/src/test/resources/log4j-rolling-zstd-lazy.xml new file mode 100644 index 00000000000..7829d335926 --- /dev/null +++ b/log4j-core-test/src/test/resources/log4j-rolling-zstd-lazy.xml @@ -0,0 +1,59 @@ + + + + + target/rolling1/rollingtest.log + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + > + + + + > + + + + + + + diff --git a/log4j-core-test/src/test/resources/log4j-rolling-zstd.xml b/log4j-core-test/src/test/resources/log4j-rolling-zstd.xml new file mode 100644 index 00000000000..80907c02f8b --- /dev/null +++ b/log4j-core-test/src/test/resources/log4j-rolling-zstd.xml @@ -0,0 +1,58 @@ + + + + + target/rolling1/rollingtest.log + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + > + + + + > + + + + + + + diff --git a/pom.xml b/pom.xml index d159d134c99..ace9e2a844e 100644 --- a/pom.xml +++ b/pom.xml @@ -470,6 +470,7 @@ 6.5.0 2.9.1 1.9 + 1.5.5-4 @@ -1301,6 +1302,12 @@ ${xz.version} + + com.github.luben + zstd-jni + ${zstd.version} + + diff --git a/src/site/xdoc/runtime-dependencies.xml b/src/site/xdoc/runtime-dependencies.xml index 3d221aa3ca2..35fab45d4a1 100644 --- a/src/site/xdoc/runtime-dependencies.xml +++ b/src/site/xdoc/runtime-dependencies.xml @@ -280,9 +280,11 @@ Bzip2, Deflate, Pack200, and XZ compression on rollover Apache Commons Compress. - In addition, - XZ requires XZ for Java. - ZSTD requires JNI binding for Zstd. + In addition: + From 11239254e623774ad126b156cd727c2c82a47cee Mon Sep 17 00:00:00 2001 From: Anurag Agarwal Date: Wed, 14 Jun 2023 15:35:00 +0530 Subject: [PATCH 4/4] Removes not needed import --- .../logging/log4j/core/appender/rolling/FileExtension.java | 1 - 1 file changed, 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java index 7259d7f44ab..9cfc7c2953a 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileExtension.java @@ -19,7 +19,6 @@ import java.io.File; import java.util.Objects; -import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.logging.log4j.core.appender.rolling.action.Action; import org.apache.logging.log4j.core.appender.rolling.action.CommonsCompressAction; import org.apache.logging.log4j.core.appender.rolling.action.GzCompressAction;