21

トレースおよびデバッグ ログは、IDE で開発を行う際に役立ちますが、ビルド中には、これらの行が非常に煩わしく、maven やその他のビルド ツールによって出力されたレポートが難読化されていることに気付きます。

-Dlog4j.rootLogger=OFF1のようなシステム プロパティを尊重する log4j をmaven で使用するか、プロジェクト ファイルの変更を必要としないものがあると便利です。-Dlog4j.configuration=alternateconfig.props 2を指定できることはわかっていますが、手動による介入を最小限に抑えて、ビルド プロセス中にログを無効にするよりスマートな方法を誰かが見つけたかどうかを確認するために、ここで質問しています。つまり、log4j を無効にする呼び出し元として maven を検出する Java クラス、またはその他のスマートなソリューションです。

ヒントはありますか?

ノート:

[1]: すでに試しましたが、うまくいきません。

[2]: それはかなり良いですが、maven ではうまく動作しないようです (おそらく確実にスキップされます)。

4

3 に答える 3

27

(質問に対するコメント)で説明され@artbristolているように、これは確実に設定できます。これは、pom.xml で次のように行うことができます。

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <forkMode>always</forkMode>
                <systemPropertyVariables>
                    <log4j.configuration>file:${basedir}/etc/log4j-silent.properties</log4j.configuration>
                </systemPropertyVariables>
            </configuration>
        </plugin>

次に、次の設定のファイル${basedir}/etc/log4j-silent.propertiesを用意すると、うまくいきます。

log4j.rootLogger=OFF

maven でのテスト実行中に log4j は完全に無効になり、すべてが IDE で正常に動作します。

より良い解決策は、追加の構成ファイルを持たないことです。しかし、今のところ見つかりません。

于 2012-12-18T16:33:27.543 に答える
8

アペンダーなしでテスト log4j 構成ファイルを指定します。

たとえば、 に log4j.properties がある場合はsrc/main/resources、それを にコピーして、アペンダーをsrc/test/resouces削除するか、ログ レベルを致命的に設定します。

于 2012-12-18T15:21:03.513 に答える
5

以前の回答に基づいて、次を使用します。

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <forkMode>always</forkMode>
        <argLine>-Dlog4j.configuration=</argLine>
    </configuration>
</plugin>

Maven の出力には、log4j が初期化されていないという警告が表示されますが、それ以外は機能しているようです。

于 2013-01-17T17:52:26.757 に答える