How to log from Spring MVC

12,696

This is because Spring is using Java Commons Logging by default. You should put jcl-over-slf4j library in your classpath, in order to Spring use SLF4J for logging.

With maven, use these dependencies in addition to SLF4J+Logback:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>
Share:
12,696
LuckyLuke
Author by

LuckyLuke

Updated on June 04, 2022

Comments

  • LuckyLuke
    LuckyLuke almost 2 years

    I am trying to log from a controller in Spring MVC but nothing appears. I am using SLF4J with logback. I managed to log from a main class, but after making it a web application it does not log.

    I thought it would work since SL4JF and Logback is in the classpath.

    @Controller
    @RequestMapping(value = "/cars")
    public class CarController {
    
        private Logger logger = LoggerFactory.getLogger(CarController.class);
    
        @RequestMapping(method = RequestMethod.GET)
        @ResponseBody
        public Map<String, String> newCar() {
            logger.info("new car");
            // more code
            return map;
        }
    }
    

    logback.xml

    <configuration scan="true">
        <property name="LOG_DIR" value="/My/User/Desktop"/>
    
        <!--Loggers-->
        <logger name="my.company" level="DEBUG"/>
    
        <!--Root logger-->
        <root level="debug">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE_ROLLER"/>
        </root>
    
        <!--Appenders-->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE_ROLLER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_DIR}/mylog.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>mylog.%d{yyyy-mm-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
    
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    </configuration>