web-dev-qa-db-ja.com

Mavenテストフェーズ中にLog4Jログを無効にする

トレースログとデバッグログは、IDEで開発を行う際に役立ちますが、ビルド中に、これらの行が非常に煩わしく、Mavenまたは他のビルドツールによって出力されたレポートがわかりにくくなります。

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

ヒントはありますか?

ノート:

[1]:すでに試しましたが、機能しません。

[2]:それはかなり良いですが、Mavenではうまく機能しないようです(おそらく、fireはそれをスキップします)

18

@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

Log4jは、Mavenでのテスト実行中に完全に無効になり、IDEではすべてが正常に機能します。

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

20

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

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

7
Qwerky

以前の回答に基づいて、私は使用します:

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

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

2
amichair