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/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..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 @@ -46,7 +46,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 +54,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 +62,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 +70,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 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/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..35fab45d4a1 100644 --- a/src/site/xdoc/runtime-dependencies.xml +++ b/src/site/xdoc/runtime-dependencies.xml @@ -280,7 +280,11 @@ Bzip2, Deflate, Pack200, and XZ compression on rollover Apache Commons Compress. - In addition, XZ requires XZ for Java. + In addition: +