2017-02-14 5 views
1

Nous utilisons slf4j avec une construction Maven. Lors de l'écriture de code, nous n'incluons pas de dépendance à une implémentation de slf4j (comme le logback), mais seulement à slf4j lui-même. Dans un tel contexte, lorsque nous exécutons des tests d'intégration (unitaires), slf4j revient à une implémentation No-op et tous les journaux produits par le code SUT (systèmes en cours de test) sont "ignorés" comme prévu.Comment puis-je activer et désactiver la journalisation dans les tests utilisant slf4j et Maven?

C'est très bien, mais parfois nous avons besoin d'afficher ces journaux SUT (débogage). Habituellement, nos développeurs ajoutent une dépendance au logback avec une portée test pour y parvenir et écrire des logs sur la console. Je ne suis pas un grand fan de cette approche, mais tant qu'ils n'oublient pas de supprimer la dépendance avant de valider le code, ça me va bien ... Cependant, ce switch on/off peut se produire plusieurs fois et est donc sujet aux erreurs (et nous nous retrouvons avec des journaux de construction inondés).

Existe-t-il un meilleur moyen d'y parvenir? Par exemple, quitter le journal en tant que test dépendance étendue tout le temps, mais en définissant une propriété qui éviterait que les journaux soient générés à moins que la propriété ne soit supprimée (une sorte de propriété "Force No-Op")?

Merci à l'avance,

Répondre

3
  • Laissez le test logback scope dependencie
  • ajouter un logback-test.xml sous la src/test/dossier de ressources avec un niveau de journal racine réglée sur NONE
  • add le fichier de test de logback à .gitignore une fois validé (le dev sera capable de définir un niveau de journal personnalisé sans risquer de pousser le fichier par erreur)

cf. https://logback.qos.ch/manual/configuration.html

Si vous utilisez Maven et si vous placez le logback-test.xml dans le dossier src/test/ressources, Maven veillera à ce que ce ne sera pas inclus dans l'artefact produit. Ainsi, vous pouvez utiliser un fichier de configuration différent , à savoir logback-test.xml pendant le test, et un autre fichier, , à savoir, logback.xml, en production.

+0

Je ne pensais pas à l'aide d'un 'logback-test.xml' avec' .gitignore'. Nice et merci! – Kraal

+1

tout le plaisir est pour moi, merci à Essex Boy pour le fair-play :) – Gab

1

Vous pourriez avoir 2 profils

<profiles> 
    <profile> 
     <id>debug</id> 
     … 
     <dependencies> 
      <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
       <version>1.1.7</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
     … 
    </profile> 
    <profile> 
     <id>release</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
</profiles> 

Ensuite, ajoutez un logback-test.xml à src/test/ressources qui ne seront ramassées pour les tests si la dépendance logback est présent dans la pom et ne sera pas écrit dans un pot de sortie/guerre.

Ensuite, pour une utilisation de débogage:

mvn clean install -Dprofile=debug 
+0

J'aime @Gab répondre mieux :) –

+0

même pour moi. Merci pour votre suggestion, mais je ne veux pas polluer nos fichiers pom.xml :-) – Kraal