How do I configure Spring and SLF4J so that I can get logging?

java, log4j, logging, slf4j, spring

Solution

In addition to Jatin's answer:

Spring uses Jakarta Commons Logging as a logging API. In order to log to slf4j, you need to make sure `commons-logging` is not on the classpath. `jcl-over-slf4j` is a replacement jar for commons-logging.

If you're using maven, you can detect where commons-logging comes from using `mvn dependency:tree` and exclude it from all dependencies that require it using dependency exclusions. You might need to run `mvn dependency:tree` several times though, because it only shows the first occurence of a transitive dependency.

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${org.springframework.version}</version>
  <exclusions>
    <exclusion>
      <artifactId>commons-logging</artifactId>
      <groupId>commons-logging</groupId>
    </exclusion>
  </exclusions>
</dependency>

Problem

I've got a maven & spring app that I want logging in. I'm keen to use SLF4J. I want to put all my config files into a directory {classpath}/config including log4j.xml and then init using a spring bean. e.g. ``` <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/> <property name="targetMethod" value="initLogging"/> <property name="arguments"> <list> <value>classpath:config/log4j.xml</value> </list> </property> </bean> ``` However I get this warning and no logging. log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. I've googled around and can't find a simple example on setting this up. Any ideas?

Original source