SpringBoot系列:8、日志slf4j

1、概述

市场上有非常多的日志框架,比如:JUL(java.util.logging)、JCL(Apache Commons-Logging)、Log4j、Log4j2、Logback、SLF4j、jboss-logging等等。SpringBoot在框架内部使用的是JCL,spring-boot-starter-logging采用了slf4j+logback的形式,同时SpringBoot也能自动适配(JUL、log4j2、lobback)并简化配置。

  • 日志门面(日志的一个抽象层)
    • JCL(Apache Commons-Logging)
    • SLF4j
    • jboss-logging
  • 日志实现
    • Log4j
    • JUL(java.util.logging)
    • Log4j2
    • Logback

2、SLF4j使用

2.1 如何在系统中使用SLF4j

官方的用户手册地址:http://www.slf4j.org/manual.html

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

首先,项目中需要引入slf4j的jar和logback的实现jar,调用日志记录方法时,不直接调用日志的实现类而是调用日志的抽象层方法。slf4j具体的使用可以参考下图:


SpringBoot系列:8、日志slf4j_第1张图片
file

2.2 使用统一的日志框架

让系统中所有的日志都统一到slf4j:

  • 将系统的其他日志框架先排除掉
  • 用中间包来替换原有的日志框架
  • 导入slf4j其他的实现
    SpringBoot系列:8、日志slf4j_第2张图片
    file

3、SpringBoot的日志关系

3.1 创建项目

新建一个项目springboot-logging,其中pom.xml的依赖:


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-test
    test

3.2 查看日志依赖关系

SpringBoot使用的日志功能:


    org.springframework.boot
    spring-boot-starter-logging
    2.1.9.RELEASE
    compile

在IDEA中打开pom.xml文件,查看依赖关系,如下图所示:

SpringBoot系列:8、日志slf4j_第3张图片
file

  • SpringBoot底层的日志也是使用slf4j+logback的方式进行日志记录
  • SpringBoot把其他的日志都替换成slf4j

3.3 日志的使用

1、SpringBoot默认的日志级别是info,在测试类中添加以下代码并运行。

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootLoggingApplicationTests {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void contextLoads() {

        // 日志级别,由低到高,trace < debug < info < warn < error
        logger.trace("这是Trace日志...");
        logger.debug("这是debug日志...");
        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("设施error日志...");

    }

}

运行结果:

SpringBoot系列:8、日志slf4j_第4张图片
file

2、修改日志级别
在application.yml配置文件中增加以下配置:

logging:
  level:
    com:
      xiaoh:
        springboot:
          logging: trace

在运行单元测试,结果如下:

SpringBoot系列:8、日志slf4j_第5张图片
file

3、日志的其他配置

logging:
  level:
    com:
      xiaoh:
        springboot:
          logging: trace
  # 不指定路径时,在当前项目下生成springboot.log日志
  # 也可以指定完整的路径
  #file: springboot.log
  # 指定目录,日志文件使用默认的spring.log
  path: /spring/log
  pattern:
    # 在控制台输出的日志格式
    console: %d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n
    # 在文件中的日志格式
    file: %d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n

日志输出格式:
- %d:表示日期时间
- %thread:表示线程名
- %-5level:表示级别从左显示5个字符宽度
- %logger{50}:表示logger名字最长50个字符,否则按照句点分隔
- %msg:日志消息
- %n:换行符

4、如何自定义配置文件
参考官方文档:https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/boot-features-logging.html#boot-features-custom-log-configuration

SpringBoot系列:8、日志slf4j_第6张图片
file

在resources目录下新建一个配置文件logback-spring.xml:



  
  
  
  
    
      [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
      
      UTF-8
    
  
  
  
  
  
    
    
    
    
      
      
      ${LOG_HOME}/logs/APP-%d{yyyy-MM-dd}.%i.log
      
      30
      
        
        64MB
      
    
    
      
      
        [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
      
      
      UTF-8
    
  
  
  
    
  
  
  
  
  
    
  


4、源码

GitHub:https://github.com/chenjiecg/SpringBoot.git

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(SpringBoot系列:8、日志slf4j)