2011-08-18 5 views
3

J'écris une bibliothèque et j'utilise sfl4j pour gérer la journalisation.Meilleures pratiques SLF4J

Je pense que c'est une bonne idée aussi longtemps que tout le monde peut fournir sa propre implémentation et ensuite, le journal fourni par mon application sera géré correctement.

Mais je ne sais pas si je dois fournir une implémentation en tant que dépendance transitive ou non.

Exemple:

Si je fournis seulement:

<dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
    </dependencies> 

L'utilisateur de mon lib peut choisir la mise en œuvre, mais s'il suffit d'ajouter ma lib sans lecture de la configuration, il ne fonctionnera pas

Sinon, si je fournis que:

<dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
    </dependencies> 

Mon lib fonctionne correctement au moment d'ajouter une dépendance, mais si l'utilisateur veut utiliser un autre slf4j, il devra exclure le mien.

Qu'est-ce que vous pensez de cela?

+0

est-ce une question maven? si c'est le cas, merci de marquer comme tel –

+0

Merci, à moi, c'est une question générale, mais dans mon exemple j'utilise maven. Donc, je devrais l'étiqueter;) – Christophe

+1

Lorsque vous dites que cela ne fonctionnera pas si vous ne fournissez pas une implémentation, vous voulez dire que votre bibliothèque ne fonctionnera pas ou la journalisation ne fonctionnera pas? – Ceki

Répondre

12

Vous jamais fournir une implémentation de journal. L'application cliente doit le faire. Autrement dit, cela constituerait une violation de la séparation des préoccupations. Ne faites aucune hypothèse sur un client inconnu.

+3

Notez également qu'à partir de la version 1.6.0 de SLF4J, si aucune liaison ne peut être trouvée sur le chemin de classe, slf4j-api sera par défaut à une implémentation nop. Voir aussi http://slf4j.org/manual.html#libraries – Ceki