Spring Boot打印日志

打印日志

Spring Boot默认使用Slf4j日志门面和Logback日志实现,关于日志门面和日志实现的关系,可以使用以下Slf4j官网的这张图表示,日志门面是日志实现的抽象层,我们调用日志的接口时应该调用日志门面的接口

Spring Boot打印日志_第1张图片

但是有时候一些框架的日志不是用slf4j的规范,这时候可以使用桥接jar包去转换,在Spring Boot整合其他框架的时候也是这么实现的,桥接的原理如下图所示

Spring Boot打印日志_第2张图片

输出日志

在Spring Boot中打印日志,可以使用Spring Boot默认的Slf4j接口,使用日志工厂类LoggerFactory获取一个日志记录器对象Logger,再用Logger对象打印日志

@SpringBootTest
class SpringDemoApplicationTests {

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

    @Test
    void contextLoads() {
        logger.info("info日志");
    }

}

打印结果如下

Spring Boot打印日志_第3张图片

日志等级

Slf4j打印日志有以下五个等级

  1. trace
  2. debug
  3. info
  4. warn
  5. error

这五个等级级别由低到高,默认日志等级为info,日志输出时只会输出高于等于默认等级的日志

@SpringBootTest
class SpringDemoApplicationTests {

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

    @Test
    void contextLoads() {
        logger.trace("trace日志");
        logger.debug("debug日志");
        logger.info("info日志");
        logger.warn("warn日志");
        logger.error("error日志");
    }

}

如以上测试用例只会输出info,warn,error这三行日志

Spring Boot打印日志_第4张图片

日志设置

我们可以在Spring Boot的核心配置文件中配置日志的设置

设置日志等级

配置日志等级,可以使用以下配置

logging:
  level:
    com.blackball: debug

这样指定的com.balckball路径下的日志输出就是debug等级

这个配置是一个map类型,我们也可以配置不同的包为不同的日志等级

logging:
  level:
    com.blackball.controller: info
    com.blackball.service: debug

设置日志文件

我们不仅可以在后台打印日志,还可以生成日志文件,只需要以下配置

logging:
  file:
    name: D:/mylog.log

运行测试用例后在指定的路径下生成了日志文件

Spring Boot打印日志_第5张图片

Spring Boot打印日志_第6张图片

logging.file.name可以指定日志保存的路径和日志文件的名称,如果没有指定路径,则默认在项目的根路径中

也可以使用logging.file.path指定日志保存的路径,但是不能指定日志文件的名称,使用默认的spring.log

logging:
  file:
    path: ./log

Spring Boot打印日志_第7张图片

注意logging.file.namelogging.file.path只能配置一个

设置日志格式

我们也可以自定义日志的输出格式,可以使用以下配置

logging:
  pattern:
  	# 配置控制台输出格式
    console: "%d{yyyy‐MM‐dd} === [%thread] === %-5level === %logger{50} === %msg%n"
    # 配置日志文件输出格式
    file: "%d{yyyy‐MM‐dd HH:mm:ss} - [%thread] - %-5level - %logger{50} - %msg%n"

其中格式定义中的符号含义如下

  • %d:日期时间
  • %thread/%t:线程名
  • %‐5level:级别从左显示5个字符宽度
  • %c:类名
  • %l:行数
  • %p:日志等级
  • %logger{50}:表示logger名字最长50个字符,否则按照句点分割
  • %msg/%m:日志消息
  • %n:换行符

切换日志框架

Spring Boot默认使用Slf4j日志门面和Logback日志实现,当我们想切换Log4j2作为日志实现时,只需要将Logback的jar包排除,再导入Log4j2的jar包即可

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-loggingartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-log4j2artifactId>
dependency>

你可能感兴趣的:(聪酱带你学Spring,Boot,spring,boot,slf4j)