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