← 返回首页
SpringBoot基础教程(二十五)
发表时间:2020-10-29 12:24:51
LogBack输出日志

logback是由log4j创始人设计的另一个开源日志组件,并且SpringBoot 默认的日志框架也是logback,所以本章主要讲解logback的基本使用方法。

由于SpringBoot默认的日志框架是 logback ,从SpringBoot 2.x后不需要引入logback的maven依赖,只需要添加logback-spring.xml即可,官方推荐使用logback-spring.xml命名,当然使用logback.xml也是可以的。

测试使用logback输出日志信,例如:执行用户登录接口,用户登录成功后,在日志文件里记录当前登录成功的用户信息。

实现步骤:

1.在resources下创建logback-spring.xml.

<configuration>
    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <property name="FILE_PATH" value="D:/springbootlesson/springbootparent/logbackdemo/myapp.%d{yyyy-MM-dd}.%i.log"/>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按照上面配置的FILE_PATH路径来保存日志 -->
            <fileNamePattern>${FILE_PATH}</fileNamePattern>
            <!-- 日志保存15天 -->
            <maxHistory>15</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 单个日志文件的最大,超过则新建日志文件存储 -->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <logger name="com.oracle" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

2.在application.yml中配置logback

#logback配置
logging:
  config: classpath:logback-spring.xml
  level:
    com.oracle.service: trace

3.在UsersController中输出日志信息。

package com.oracle.controller;

import com.oracle.entity.Users;
import com.oracle.json.JsonData;
import com.oracle.json.JsonResult;
import com.oracle.service.UsersService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;

@RestController
@RequestMapping("users")
public class UsersController {

    private final static Logger logger = LoggerFactory.getLogger(UsersController.class);

    @Resource
    private UsersService usersService;

    @GetMapping("/")
    public JsonData login(String username, String password) {

        logger.debug("=====测试日志debug级别打印====");
        logger.info("======测试日志info级别打印=====");
        logger.error("=====测试日志error级别打印====");
        logger.warn("======测试日志warn级别打印=====");

        Users loginUser = usersService.login(username, password);
        if (loginUser != null) {
            //如果登录成功,输出日志。
            logger.info("登录成功,当前用户名是:"+username);
            return JsonResult.success(loginUser, "loginSuccess");
        }
        return JsonResult.fail("loginFailure");
    }

}

官方推荐使用lombok的@Slf4j,效果于上完全相同。

package com.oracle.controller;

import com.oracle.entity.Users;
import com.oracle.json.JsonData;
import com.oracle.json.JsonResult;
import com.oracle.service.UsersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;

@RestController
@RequestMapping("users")
@Slf4j
public class UsersController {

    @Resource
    private UsersService usersService;

    @GetMapping("/")
    public JsonData login(String username, String password) {

        log.debug("=====测试日志debug级别打印====");
        log.info("======测试日志info级别打印=====");
        log.error("=====测试日志error级别打印====");
        log.warn("======测试日志warn级别打印=====");

        Users loginUser = usersService.login(username, password);
        if (loginUser != null) {
            //如果登录成功,输出日志。
            log.info("登录成功,当前用户名是:"+username);
            return JsonResult.success(loginUser, "loginSuccess");
        }
        return JsonResult.fail("loginFailure");
    }

}

测试用户登录接口,在项目根目录下会生成日志文件,输出日志信息效果如下: