世界现状
目前我们的RollingFileAppender
inlog4j2.xml
使用 Gzip 压缩:
<RollingFile name="RollingFile"
fileName="logs/engine.log"
filePattern="logs/engine.log.%i.gz">
目标
我想切换到 LZMA(2)(即.xz
)压缩,以享受改进的压缩比。
试图
我已尝试更改engine.log.%i.gz
为engine.log.%i.xz
- 根据文档:
如果文件模式以
.gz
,.zip
,.bz2
,.deflate
,结尾.pack200
,或者.xz
生成的存档将使用与后缀匹配的压缩方案进行压缩。bzip2、Deflate、Pack200 和 XZ 格式需要 Apache Commons Compress。此外,XZ 需要XZ for Java。
此外,我确保我对XZ for Java有运行时依赖项——通过pom.xml
:
<dependency>
<!-- Support Log4j2 Log compression schemes: ".gz", ".zip", ".bz2", ".deflate", ".pack200", [".xz" (part 1 of 2)] -->
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<!-- Support Log4j2 Log compression scheme [".xz" (part 2 of 2)] -->
<groupId>org.tukaani</groupId>
<artifactId>xz</artifactId>
<version>1.5</version>
</dependency>
结果
当 RollingFileAppender 被触发时:创建的档案确实是根据需要命名 engines.log.1.xz
的。
但是,其内容不正确:
期待
engines.log.1.xz
应包含 LZMA(2) 压缩文本
实际的
engines.log.1.xz
而是包含纯的、未压缩的文本。
健全性检查
我确认org.tukaani:xz
并org.apache.commons:commons-compress
成功进入了我的 jar 的类路径:
jar tf mycooljar.jar | grep tukaani
org/tukaani/
org/tukaani/xz/
…
jar tf mycooljar.jar | grep org/apache/commons/compress
org/apache/commons/compress/
org/apache/commons/compress/changes/
…
此 Java 程序未部署到 J2EE 网络服务器。我相信它的类加载很简单。
概括
我已正确遵循创建.gz
档案所需的说明。
.xz
我相信创建档案所需的唯一额外步骤是:我必须在运行时提供XZ for Java artefact。我已经做到了。
我在这里错过了什么吗?我很想相信以下其中一项:
- 功能坏了
- 文档不完整/不正确
- log4j2 无法在运行时发现类