SpringBoot 日志配置使用

目录

SpringBoot中的日志使用

SpringBoot中的日志设计

▎测试Springboot底层日志实现

SpringBoot 日志配置文件

▎默认配置文件application.properties

▎指定配置文件

使用SpringBoot解析日志配置

☛ 举例说明:

SpringBoot 切换日志实现

▎切换为log4j2日志

▎配置log4j2配置文件


SpringBoot中的日志使用

SpringBoot框架在企业中的使用越来越普遍,SpringBoot日志也是开发中常用的日志系统

SpringBoot 默认就是使用SLF4J作为日志门面,logback作为日志实现来记录日志

SpringBoot中的日志设计


  spring-boot-starter-logging
  org.springframework.boot

依赖关系图:

SpringBoot 日志配置使用_第1张图片

1. 新建SpringBoot工程项目

SpringBoot 日志配置使用_第2张图片

 2. 添加一个web启动器

SpringBoot 日志配置使用_第3张图片

3. 打开pom.xml文件,选中boot-starter-web启动器,查看maven关系依赖图

4. boot-starter-web 启动器当中,会依赖中我们所使用环境的一些 jar包的信息,里面就包含了slf4j日志门面和logback的日志实现

SpringBoot 日志配置使用_第4张图片

  总结

  1. SpringBoot底层默认使用logback作为日志实现
  2. 使用了SLF4J作为日志门面
  3. 将JUL也转换成slf4j
  4. 也可以使用log4j2作为日志门面,但是最终也是通过slf4j调用logback

在使用Springboot框架之后,其内部所有的日志实现都通过桥接器转换成slf4j日志门面进行统一的管理,最终交给logback日志实现框架进行日志输出

测试Springboot底层日志实现

用代码测试下,看是否如我们所说,不管使用什么日志实现,Springboot底层最终都是通过slf4j进行统一管理,并采用logbook作为日志实现框架进行输出

1. 在当前Springboot项目下的测试方法中编写测试代码

SpringBoot 日志配置使用_第5张图片

2. slf4j 测试代码

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogApplicationTests {

    // 声明日志记录器对象(slf4j包)
    public static final Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    @Test
    void contextLoads() {
        logger.error("error");
        logger.warn("warn");
        logger.info("info");
        logger.debug("debug");
        logger.trace("trace");
    }

}

3. 运行结果

!! 注意:因为我们没有提供任何配置文件,因此默认的日志级别就是info

使用log4j2输出日志信息 

4. 增加log4j2的日志打印

import org.apache.logging.log4j.LogManager;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLogApplicationTests {

    // 声明日志记录器对象(slf4j包)
    public static final Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    @Test
    void contextLoads() {
        // 使用slf4j输出日志
        logger.error("error");
        logger.warn("warn");
        logger.info("info");
        logger.debug("debug");
        logger.trace("trace");

        // 使用log4j2输出日志, 底层会使用桥接器切换为slf4j门面和logback日志实现
        org.apache.logging.log4j.Logger logger2 = LogManager.getLogger(SpringbootLogApplicationTests.class);
        logger2.fatal("log4j2 fatal");
        logger2.error("log4j2 error");
        logger2.warn("log4j2 warn");
        logger2.info("log4j2 info");
        logger2.debug("log4j2 debug"); 
        logger2.trace("log4j2 trace");
    }
}

5. 输出结果

SpringBoot 日志配置使用_第6张图片

说明:使用log4j2获取logger进行日志打印,但控制台输出的日志格式与slf4j 打印一致,说明springboot底层调用了log4j的桥接器,将log4j2转换成了slf4j进行统一管理,最终由logback日志实现框架进行日志输出

其实从日志输出级别也可以看出,log4j2 输出fatal的日志信息时,前面显示的级别是error

SpringBoot 日志配置文件

Springboot 支持对日志进行具体的配置,可以直接在application.properties配置文件中简单定义,也可以导入具体日志实现的配置文件

默认配置文件application.properties

Springboot默认提供的配置文件可以进行简单的配置

SpringBoot 日志配置使用_第7张图片

指定日志输出的级别、格式

# 自定义logger对象的日志级别("com.ahead" 是自定义logger对象的名称)
logging.level.com.ahead = trace

# 指定控制台输出消息格式
logging.pattern.console = [%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %m%n

 输出结果 :各日志级别的信息按照指定的格式被打印出来了

SpringBoot 日志配置使用_第8张图片

指定日志信息输出到文件

# 自定义logger对象的日志级别("com.ahead" 是自定义logger对象的名称)
logging.level.com.ahead = trace

# 指定控制台输出消息格式
logging.pattern.console = [%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %m%n


# 指定存放日志文件的具体路径和生成的日志文件名称(指定的目录和文件可无需存在,会自动生成)
logging.file.name = /Users/wpf011/log/springboot.log

# 指定日志文件消息格式
logging.pattern.file = [%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %m%n

说明:既指定了输出到控制台的console,也指定了输出到文件file,因此控制台也会输出日志内容,指定的文件目录也会产生日志文件

SpringBoot 日志配置使用_第9张图片

SpringBoot 日志配置使用_第10张图片

指定日志文件存放目录

# 指定存放日志文件的具体路径和生成的日志文件名称(指定的目录和文件可无需存在,会自动生成)
#logging.file.name = /Users/wpf011/log/springboot.log

# 指定日志文件存放的目录,默认生成spring.log文件(指定的目录和文件可无需存在,会自动生成)
logging.file.path = /Users/wpf011/log/springboot/

# 指定日志文件消息格式
logging.pattern.file = [%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %m%n

# 注意:file.name和file.path不能同时使用,如果同时使用,默认使用file.name
# file.name 指定了日志文件的存放目录和生成的日志文件名称
# file.path 仅指定日志文件目录

SpringBoot 日志配置使用_第11张图片

 SpringBoot 日志配置使用_第12张图片

SpringBoot 日志配置使用_第13张图片

指定配置文件

SpringBoot提供的默认配置文件无法进行复杂的配置

比如所有日志都放到一个文件当中,不易于后期维护和管理,希望是按照一定的规则进行滚动拆分,比如文件大小,时间等。通过简单的SpringBoot提供的配置文件还不够,通常在企业开发中会导入具体某个日志实现相应的配置文件

给类路径下放上每个日志框架自己的配置文件,SpringBoot就不使用默认配置的了

日志框架 配置文件
Logback logback-spring.xml、logback.xml
Log4j2 log4j2-spring.xml、log4j2.xml
JUL logging.properties

举例:指定logback配置文件

在类路径下新建logback的配置文件:logback-spring.xml 或 logback.xml

SpringBoot 日志配置使用_第14张图片

1. 配置文件内容如下




    
    
    
  
    
    
        
        System.err
        
        
            ${pattern}
        
    


    
    
        
    

2. 运行测试用例,查看日志输出结果

 上传了具体日志实现的配置文件后,默认的SpringBoot配置信息就会作废

使用SpringBoot解析日志配置

在上述指定配置文件中,对于logback配置文件,logback-spring.xml 和 logback.xml 都能够被加载识别,增加了-spring 的配置文件会被SpringBoot框架解析,而不是由logback解析

被SpringBoot框架解析的文件,只需修改SpringBoot的全局参数,就能对配置文件进行灵活调整,而不需要再修改logback提供的核心配置文件了


举例说明:

在开发环境输出的消息格式是详细信息(行号、类名),在生产环境下只需输出时间和日志具体内容即可,那么我们可以如下操作

1. logback-spring.xml 默认由SpringBoot框架解析日志配置


     
     
          ${pattern}
     
     
     
          %d{yyyy-MM-dd HH:mm:ss} [%-5level]  %m%n
     

2. application.properties 配置文件

spring.profiles.active = dev

具体操作如下

调整logback配置文件为SpringBoot 框架所解析

1. 将logback.xml 文件修改为logback-spring.xml

SpringBoot 日志配置使用_第15张图片

2. 增加 标签设置

说明:如果是dev开发环境,输出的消息格式是${pattern},即标签中定义的值,消息详细,如果是pro开发环境,则消息格式相对简单,只输出时间、日志级别、日志内容 

3. 增加application.properties 配置文件的全局参数

SpringBoot 日志配置使用_第16张图片

4. 测试用例输出结果 

SpringBoot 日志配置使用_第17张图片

结论:通过SpringBoot默认配置文件全局参数设置,可控制针对不同环境日志输出的具体格式

SpringBoot 切换日志实现

SpringBoot框架默认使用slf4j的统一API进行日志的管理,具体实现日志框架用的是logback

在目前企业开发中,log4j2的性能已经远超于logback了,通过SpringBoot也可以使用log4j2来进行日志的实现处理。

切换为log4j2日志

  1. 排除logback:将默认启动器的logging进行排除,其内部的logback就被移除了
  2. 新增 log4j2 依赖:添加log4j2 启动器。底层日志门面也是slf4j,但日志实现换成了log4j2,底层也是使用转换器和桥接器

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




    org.springframework.boot
    spring-boot-starter-log4j2

执行测试用例:我们上述配置了logback.xml文件失效了,说明底层使用的日志换成了log4j2

SpringBoot 日志配置使用_第18张图片

配置log4j2配置文件

上述指定配置文件也讲述过了,由于我们更换了log4j2,因此我们也可以设置log4j2-spring.xml、log4j2.xml 相应的配置文件

1. 在classpath目录下增加配置文件

SpringBoot 日志配置使用_第19张图片

2. 配置文件具体内容




  
    
    
        
        
            
            
        

    

    
    
        
        
            
            
        
    

3.测试用例执行结果

你可能感兴趣的:(日志框架,java)