トレースログとデバッグログは、IDEで開発を行う際に役立ちますが、ビルド中に、これらの行が非常に煩わしく、Mavenまたは他のビルドツールによって出力されたレポートがわかりにくくなります。
-Dlog4j.rootLogger=OFF
のようなシステムプロパティを尊重するlog4jがあると便利です。1 Mavenまたはプロジェクトファイルの変更を必要としないもので使用します。 -Dlog4j.configuration=alternateconfig.props
を指定できることはわかっています 2 しかし、私はここで、最小限の手動介入でビルドプロセス中にロギングを無効にするよりスマートな方法を誰かが見つけたかどうかを調べるように求めています。つまり一部のJavaクラスは、log4jまたはその他のスマートソリューションを無効にする呼び出し元としてMavenを検出します。
ヒントはありますか?
ノート:
[1]:すでに試しましたが、機能しません。
[2]:それはかなり良いですが、Mavenではうまく機能しないようです(おそらく、fireはそれをスキップします)
@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ではすべてが正常に機能します。
より良い解決策は、追加の構成ファイルを持たないことです。しかし、今のところそれを見つけることができません。
アペンダーのないテストlog4j構成ファイルを指定します。
たとえば、src/main/resources
にlog4j.propertiesがある場合は、それをsrc/test/resouces
にコピーして、アペンダーを削除するか、ログレベルを致命的に設定します。
以前の回答に基づいて、私は使用します:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<forkMode>always</forkMode>
<argLine>-Dlog4j.configuration=</argLine>
</configuration>
</plugin>
Mavenの出力には、log4jが初期化されていないという警告が表示されますが、それ以外は機能しているようです。