Comment configurer Spring et SLF4J pour pouvoir me connecter?

J’ai une application Maven & Spring que je veux connecter. Je souhaite utiliser SLF4J.

Je veux mettre tous mes fichiers de configuration dans un répertoire {classpath} / config, y compris log4j.xml, puis initier en utilisant un bean spring.

par exemple

     classpath:config/log4j.xml    

Cependant, je reçois cet avertissement et aucun enregistrement.

log4j: WARN Aucun auteur n’a été trouvé pour le journal (org.springframework.context.support.ClassPathXmlApplicationContext). log4j: WARN Veuillez initialiser correctement le système log4j. log4j: WARN Voir http://logging.apache.org/log4j/1.2/faq.html#noconfig pour plus d’informations.

J’ai fait des recherches sur Google et je ne trouve pas d’exemple simple sur la manière de le configurer. Des idées?

En plus de la réponse de Jatin:

Spring utilise Jakarta Commons Logging comme une API de journalisation. Pour vous connecter à slf4j, vous devez vous assurer que la commons-logging ne se trouve pas dans le classpath. jcl-over-slf4j est un pot de remplacement pour la journalisation des commons.

Si vous utilisez maven, vous pouvez détecter où la journalisation des commons provient de la mvn dependency:tree et l’exclure de toutes les dépendances qui en ont besoin en utilisant les exclusions de dépendance. Vous devrez peut-être exécuter mvn dependency:tree plusieurs fois, car il ne montre que la première occurrence d’une dépendance transitive.

  org.springframework spring-context ${org.springframework.version}   commons-logging commons-logging    

Vous trouverez un exemple à l’ adresse https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk . Vous devez inclure des dépendances dans votre fichier POM pour permettre la journalisation.

   org.slf4j slf4j-api ${org.slf4j.version}   org.slf4j jcl-over-slf4j ${org.slf4j.version} runtime   org.slf4j slf4j-log4j12 ${org.slf4j.version} runtime   log4j log4j 1.2.16 runtime  

Par souci d’exhaustivité, une variante de logback-classic :

  ch.qos.logback logback-classic 1.0.0   org.slf4j jcl-over-slf4j 1.6.6 runtime  

N’oubliez cependant pas de désactiver la dépendance à la commons-logging qui provient de la dépendance de Spring, comme dans la réponse acceptée (de Stijn).

Utilisez la configuration de coup pour l’implémentation de l’ JCL API sur le classpath :

   org.springframework spring-context 3.0.0.RELEASE runtime   commons-logging commons-logging     org.slf4j jcl-over-slf4j 1.5.8 runtime   org.slf4j slf4j-api 1.5.8 runtime   org.slf4j slf4j-log4j12 1.5.8 runtime   log4j log4j 1.2.14 runtime   

pour plus d’informations, cliquez ici

conserver le fichier log4j dans le package par défaut

J’aime la méthode de reconnexion, et pour slf4j, nous faisons la configuration similaire:

   org.slf4j slf4j-log4j12   org.slf4j jcl-over-slf4j  

slf4j-log4j12 introduira automatiquement slf4j-api et log4j, donc pas besoin de mettre autant de dépendances

Ajoutez simplement lazy-init="false" pour charger avec empressement le bean pour la configuration log4j dans votre contexte racine. Cela devrait résoudre le message d’ log4j:WARN No appenders could be found for logger

Exemple:

  

Une meilleure approche serait d’avoir la configuration dans web.xml ou en tant que paramètre JVM ( -Dlog4j.configuration=.../conf/log4j.xml ou avec le préfixe ‘file:’ en tant que -Dlog4j.configuration=file:conf/log4j.properties pour certains cas)