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

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


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>


You'll find an example at https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk. You need to include some dependencies in your POM file to enable logging.

<!-- Logging -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>${org.slf4j.version}</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>jcl-over-slf4j</artifactId>        <version>${org.slf4j.version}</version>        <scope>runtime</scope>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>${org.slf4j.version}</version>        <scope>runtime</scope>    </dependency>    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.16</version>        <scope>runtime</scope>    </dependency>


Just for the sake of completeness, a logback-classic variant:

<dependency>    <groupId>ch.qos.logback</groupId>    <artifactId>logback-classic</artifactId>    <version>1.0.0</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>jcl-over-slf4j</artifactId>    <version>1.6.6</version>    <scope>runtime</scope></dependency>

Do not forget however to disable commons-logging dependency which sprouts from Spring dependency like in the accepted (Stijn's) answer.