3

我正在尝试从 Spring MVC 中的控制器登录,但没有出现任何内容。我正在使用带有 logback 的 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-slf4j库放在类路径中,以便 Spring 使用 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 回答
0

排除默认记录器并在pom.xml文件中添加您想要使用的任何记录器,如下所示。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
于 2020-04-18T07:21:13.127 回答