web-dev-qa-db-fra.com

Comment définir le niveau de journalisation sur DEBUG lors des tests Junit?

J'utilise SLF4J avec LOG4J, et les configurations sont généralement dans le log4j.properties et définit le niveau de journalisation sur INFO.

Cependant, pendant les tests, je voudrais définir les journaux sur DEBUG.

Je ne vois pas de moyen d'automatiser cela, ni d'avoir quelque chose comme log4j.tests.properties qui ne serait chargé que pendant les tests.

J'ai donc essayé de le faire par programme dans la configuration de test (la @BeforeClass):

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

Sans succès ...

J'utilise ces versions:

    <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>

Comment puis-je atteindre ce résultat?

EDIT: Je pense que je n'étais pas assez clair. Cette question ne concerne pas la définition du niveau de journal correct ... Il s'agit de définir le niveau de journal DEBUG lors de l'exécution des tests Junit et de définir le niveau de journal INFO dans toute autre situation. Je veux automatiser cela.

20
PedroD

Vous n'avez pas besoin de donner à la JVM une implémentation de journal différente.

Le code de journalisation recherche le log4j.properties fichier utilisant le chemin de classe. Il vous suffit donc de vous assurer que votre test log4j.properties le fichier se trouve dans un emplacement qu'il trouvera avant le fichier de version.

J'utilise Maven, qui dispose les fichiers dans des répertoires pour faciliter les choses. Ma libération log4j.properties va dans le répertoire src/main/resources. Ma version de test va dans src/test/resources. Le chemin de génération Eclipse (chemin de classe) est configuré pour rechercher src/test/resources avant src/main/resources, donc vos tests unitaires utilisent le fichier de test. Les instructions de construction JAR (ou WAR) utilisent les fichiers de src/main/resources.

18
PedroD

Habituellement, LEVEL.FINEST devrait le faire ... mais jetez un œil à http://saltnlight5.blogspot.mx/2013/08/how-to-configure-slf4j-with-different.html to voir la considération de l'implémentation des frameworks de journalisation.

2

Vous pouvez utiliser le org.Apache.logging.log4j.core.config.Configurator qui a une méthode setAllLevels.

Dans votre test, vous pouvez l'utiliser dans un @Before méthode:

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

REMARQUE: testé avec liaison org.slf4j: slf4j-log4j12: 1.7.26

0
Nicolas Massart