3

Spring MVC でコントローラーからログを記録しようとしていますが、何も表示されません。ログバックでSLF4Jを使用しています。メインクラスからはなんとかログに記録できましたが、Web アプリケーションにした後はログに記録されません。

SL4JF と Logback がクラスパスにあるので、うまくいくと思いました。

@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>
4

2 に答える 2

5

これは、Spring がデフォルトで Java Commons Logging を使用しているためです。jcl-over-slf4jSpring がロギングに SLF4J を使用するには、ライブラリをクラスパスに配置する必要があります。

Maven では、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>
于 2013-04-08T07:56:37.687 に答える