世界の現状
現在、Gzip 圧縮RollingFileAppender
を使用しています。log4j2.xml
<RollingFile name="RollingFile"
fileName="logs/engine.log"
filePattern="logs/engine.log.%i.gz">
ゴール
.xz
改善された圧縮率を享受するために、LZMA(2) (つまり ) 圧縮に切り替えたいと考えています。
試み
ドキュメントに従って、次のように変更しようとし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
代わりに、圧縮されていないプレーン テキストが含まれます。
健全性チェック
jar のクラスパスに正常に作成されたことorg.tukaani:xz
を確認します。org.apache.commons:commons-compress
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 Web サーバーにデプロイされません。クラスのロードは簡単だと思います。
概要
.gz
アーカイブの作成に必要な指示に正しく従いました。
.xz
アーカイブを作成するために必要な追加のステップは、実行時にXZ for Javaアーティファクトを提供する必要があることだけだと思います。私はこれをしました。
ここで何か不足していますか?私は次のいずれかを信じたくなる。
- 機能が壊れている
- ドキュメントが不完全/不正確です
- log4j2 が実行時にクラスを検出できない