web-dev-qa-db-ja.com

Junitテスト中にログレベルをDEBUGに設定する方法は?

LOG4JでSLF4Jを使用していますが、構成は通常log4j.properties、およびログレベルをINFOに設定します。

ただし、テスト中にログをDEBUGに設定したいと思います。

これを自動化する方法がわかりません。log4j.tests.propertiesテスト中にのみロードされます。

そこで、テストセットアップ(@BeforeClass)でこれをプログラムで実行しようとしました。

LogManager.getRootLogger().setLevel(Level.ALL);

成功なし...

私はこれらのバージョンを使用しています:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

どうすればこの結果を達成できますか?

編集:私は十分に明確ではなかったと思います。この質問は、正しいログレベルの設定に関するものではありません... Junitテストの実行時にDEBUGログレベルを設定し、他の状況でINFOログレベルを設定することに関するものです。これを自動化したい。

20
PedroD

JVMに別のログ実装を提供する必要はありません。

ロギングコードは、クラスパスを使用してlog4j.propertiesファイルを検索します。そのため、テストlog4j.propertiesファイルがリリースファイルの前にある場所にあることを確認するだけです。

Mavenを使用します。Mavenは、ディレクトリ内にファイルを配置して、それを簡単にします。私のリリースlog4j.propertiesはディレクトリsrc/main/resourcesに入ります。私のテストバージョンはsrc/test/resourcesに入ります。 Eclipseビルドパス(クラスパス)は、src/test/resourcesの前にsrc/main/resourcesを検索するように設定されているため、ユニットテストではテストファイルを使用します。 JAR(またはWAR)ビルド命令は、src/main/resourcesのファイルを使用します。

18
PedroD

通常、LEVEL.FINESTはそれを行う必要がありますが、 http://saltnlight5.blogspot.mx/2013/08/how-to-configure-slf4j-with-different.html を見てくださいロギングフレームワークの実装に関する考慮事項を参照してください。

setAllLevelsメソッドを持つorg.Apache.logging.log4j.core.config.Configuratorを使用できます。

テストでは、@Beforeメソッドで使用できます。

  @Before
  public void changeLogLevel() {
    Configurator.setAllLevels("", Level.ALL);
  }

注:バインディングでテスト org.slf4j:slf4j-log4j12:1.7.26

0
Nicolas Massart