文章目录

  • 一、日志概念
  • 二、自定义日志打印
  • 1、在程序中得到日志对象
  • 2、使用日志对象打印日志
  • 3、日志格式
  • 三、日志持久化
  • 1、设置日志的名称
  • 2、设置日志的保存路径
  • 四、日志级别
  • 1、作用
  • 2、分类
  • 3、使用
  • 五、更简单的日志输出—lombok
  • 1、添加 lombok 依赖
  • ① EditStarters
  • 2、输出日志
  • 3、lombok 原理解释
  • 4、lombok 更多注解说明


一、日志概念

日志就是用来发现和定位问题的。

Spring Boot 项⽬在启动的时候默认就有日志输出,如下:

spring aop日志打印 spring日志文件_spring aop日志打印

二、自定义日志打印

⾃定义打印⽇志的步骤:

  • 获取⽇志对象。
  • 打印内容。

1、在程序中得到日志对象

因为 Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志。

// 1.得到日志对象
    private static Logger logger =
            LoggerFactory.getLogger(TestController.class);

注意:Logger 对象是属于 org.slf4j 包下的,不要导⼊错包,否则会报错。

常见的日志框架:

spring aop日志打印 spring日志文件_spring boot_02

2、使用日志对象打印日志

@RestController
public class TestController {

    // 1.得到日志对象
    private static Logger logger =
            LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/hikey")
    public String HiKey() {
    	// 2.打印⽇志
        logger.info("Hi,Spring Boot Logger!");
    }
}

运行结果为:

spring aop日志打印 spring日志文件_spring_03

3、日志格式

spring aop日志打印 spring日志文件_spring_04

三、日志持久化

日志持久化的方式:

  • 设置日志的名称
  • 设置日志的保存路径

1、设置日志的名称

# 设置⽇志⽂件的名称
logging:
  file:
    name: springboot.log

运行结果为:

spring aop日志打印 spring日志文件_spring_05


特性:

  • 日志不会丢失,会一直追加
  • 当日志较大时,会自动分割

2、设置日志的保存路径

# 设置⽇志⽂件的⽬录
logging:
  file:
    path: D:\work\

运行结果为:

spring aop日志打印 spring日志文件_spring boot_06

四、日志级别

1、作用

日志的级别就是用来筛选日志的。

有了⽇志级别之后就可以过滤⾃⼰想看到的信息了,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了。

2、分类

日志的级别有:

  • trace:微量,少许的意思,级别最低;
  • debug:调试,需要调试时候的关键信息打印;
  • info:普通,普通打印信息;
  • warn:警告,不影响使⽤,但需要注意的问题;
  • error:错误,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

其级别顺序为:

spring aop日志打印 spring日志文件_spring aop日志打印_07

注意:虽然有 fatal 这个级别,但是我们并没有办法去使用这个级别的日志。

3、使用

⽇志级别配置只需要在配置⽂件中设置 “logging.level” 配置项即可,代码如下:

# 日志级别设置
logging:
  level:
  	# spring 的日志
    root: info
    # 自定义路径
    com:
      example:
        springbootdemo: debug

测试类:

@RestController
public class TestController {

    // 1.得到日志对象
    private static Logger logger =
            LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/hikey")
    public String HiKey() {
        // 2.打印日志
        logger.trace("Hi,i am trace.");
        logger.debug("Hi,i am debug.");
        logger.info("Hi,i am info.");
        logger.warn("Hi,i am warn.");
        logger.error("Hi,i am error.");
        return myList.getName().toString();
    }
}

运行结果为:

spring aop日志打印 spring日志文件_打印日志_08

五、更简单的日志输出—lombok

刚刚我们学习了自定义日志打印,但如果我们想在多个类中打印日志,每次都要使用一次 LoggerFactory.getLogger(xxx.class),这样就会非常的麻烦,lombok 就可以解决这个问题。

1、添加 lombok 依赖

我们要先增加 lombok 依赖。

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.20</version>
			<optional>true</optional>
		</dependency>

① EditStarters

这里分享一个小插件,用来添加依赖的。

File -> Settings -> Plugins

spring aop日志打印 spring日志文件_spring aop日志打印_09


在 pom.xml 中,右键 -> Generate -> EditStarters

spring aop日志打印 spring日志文件_java-ee_10

2、输出日志

使用 @Slf4j 注解,使用 log 对象,即可输入日志,代码如下:

@RestController
@Slf4j
public class StudentController {

    @RequestMapping("/sayhello")
    public String sayHello(){
        // 2.使用日志对象,打印日志
        log.info("Hi,i am info.");
        return "Hi,Spring Boot Logger!";
    }
}

运行结果为:

spring aop日志打印 spring日志文件_打印日志_11

3、lombok 原理解释

target 为项⽬最终执⾏的代码,我们查看 target ⽬录就可以知道 lombok 的原理:

spring aop日志打印 spring日志文件_spring aop日志打印_12


通过对比,我们可以发现在字节码文件中, @slf4j 注解消失了,而多出来了一行代码,正是我们之前觉得麻烦的代码。所以 lombok 其实就是在 .java 文件转化为 .class 文件之前,将注解变为代码插入到 .java 文件中。如图:

spring aop日志打印 spring日志文件_打印日志_13

4、lombok 更多注解说明

基本注解

注解

作用

@Getter

⾃动添加 getter ⽅法

@Setter

⾃动添加 setter ⽅法

@ToString

⾃动添加 toString ⽅法

@EqualsAndHashCode

⾃动添加 equals 和 hashCode ⽅法

@NoArgsConstructor

⾃动添加⽆参构造⽅法

@AllArgsConstructor

⾃动添加全属性构造⽅法,顺序按照属性的定义顺序

@NonNull

属性不能为 null

@RequiredArgsConstructor

⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需

组合注解

注解

作用

@Data

@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

@Slf4j

添加⼀个名为 log 的⽇志,使⽤ slf4j