3

世界の現状

現在、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.xzLZMA(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 が実行時にクラスを検出できない
4

1 に答える 1

2

Remko Popma は、これがバグであることを確認しました:

  • log4j-core*.xy一致するパターンとしてのみ受け入れられましたが、ドキュメントではそれ*.xzが必要な入力であることが示唆されていました。
  • "xy"new CommonsCompressAction(…)必須の代わりに渡されていました"xz"

これらは両方ともタイプミスであると推定されました。提案された解決策は、両方を に変更することでしたxz

Gary Gregory さんが修正を書きました。修正は現在 にmasterあるorg.apache.logging.log4j:log4j-core:2.6-SNAPSHOTため、 でリリースする必要があり2.6ます。

于 2016-04-24T12:05:49.787 に答える