SpringBoot日志

文章目录

  • 1.日志文件有什么用?
  • 2.如何使用日志?
  • 3.自定义日志的打印步骤
    • 常见的日志框架
    • 日志的格式
  • 4.日志级别
    • 日志级别的作用
    • 日志级别的分类与使用
    • 日志级别设置
  • 5.日志持久化
    • 设置日志的保存路径
    • 设置日志的保存文件名
  • 6. 更简单的日志输出(lombok )
  • 7. Lombok原理
  • 8. lombok 更多注解说明


1.日志文件有什么用?

  1. 快速定位和排查问题
  2. 记录用户信息
  3. 记录操作信息,帮你恢复数据或定位到责任人
  4. 记录程序的执行时间,方便以后优化程序提供数据支持

2.如何使用日志?

SpringBoot项目在启动的时候默认就有日志输出,如图

SpringBoot日志_第1张图片
以上内容就是 Spring Boot 输出的控制台日志信息
通过上述日志信息我们能发现以下3个问题:
● SpringBoot 内置了日志框架(不然也输出不了日志)
● 默认情况下,输出的日志并非是开发者定义和打印的,那么开发者怎么在程序中自定义打印日志呢?
● 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久保存下来呢?

3.自定义日志的打印步骤

  1. 在程序中获取到日志对象
  2. 调用日志对象的打印方法,将信息打印出来

注意:Logger对象是属于org.slf4j包下的,不要导错包
SpringBoot日志_第2张图片

在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,如下代码所示
⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位
到问题类。

@Controller
public class DemoController {
    // 1. 获取日志对象
    private static Logger logger = LoggerFactory.getLogger(DemoController.class);
    @RequestMapping("/hello") // 路由
    @ResponseBody // 返回给浏览器一个接口而非页面
    public String getInfo(String str) {
        // 2. 使用日志对象的日志打印方法来打印日志
        logger.info("###########  执行了 getInfo方法,获取到了query string参数 str="+str+" ###########");
        return "hello spring boot "+str;
    }
}

浏览器输入url访问

SpringBoot日志_第3张图片
打印日志

在这里插入图片描述

常见的日志框架

因为SpringBoot中内置了日志框架slf4j,所以我们可以直接在代码中调用slf4j输出日志,slf4j是不做任何日志相关的操作的,它只是把任务交给其它人去做,比如直接交给logback去做。

目前主流的实现就是通过slf4j来调用logback,日志门面值赋值对接,真正完成任务的日志实现框架。也就是说slf4j就是一个日志接口,而logback才是接口的实现,真正干活的是logback

因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。

日志的格式

在这里插入图片描述

4.日志级别

日志级别的作用

⽇志的级别就是为了筛选符合⽬标的⽇志信息的
有了⽇志级别之后就可以过滤⾃⼰想看到的信息了,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者的信息筛选时间

日志级别的分类与使用

日志的级别分为

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

过滤规则:比日志设置级别低的日志就会忽略掉(不显示),级别越高显示的信息越少
SpringBoot日志_第4张图片
代码示例:

@Controller
public class DemoController {
    // 1. 获取日志对象
    private static Logger logger = LoggerFactory.getLogger(DemoController.class);
    @RequestMapping("/hello") // 路由
    @ResponseBody // 返回给浏览器一个接口而非页面
    public String getInfo(String str) {
        // 2. 使用日志对象的日志打印方法来打印日志
        logger.trace("trace级别");
        logger.debug("debug级别");
        logger.info("info级别");
        logger.warn("warn级别");
        logger.error("error级别");
        return "hello spring boot "+str;
    }
}

这里是默认的日志级别info,调用结果。比 info级别低的日志不会显示

SpringBoot日志_第5张图片

日志级别设置

properties配置文件

logging.level.root=debug

yml配置文件

logging:
  level:
    root: error

5.日志持久化

日志持久化有两种实现方式

设置日志的保存路径

通过相对路径或者绝对路径
properties配置文件

logging.file.path=./src/main/resources/log/

yml文件

logging:
  file:
    path: C:/Users/HeHanYu/Desktopcode/Java

设置日志的保存文件名

logging.file.path=D:/root/test/
logging.file.name=D:/root/test/abc.log

默认情况下 spring boot 会有一个最大的日志大小限制,如果日志的文件大于默认的最大日志大小,那么springboot会重新创建一个日志文件

6. 更简单的日志输出(lombok )

1.安装 EditStarters插件
SpringBoot日志_第6张图片

  1. 在pom.xml文件中右击鼠标

SpringBoot日志_第7张图片

  1. 点击插件

SpringBoot日志_第8张图片

  1. 选择下载源
    SpringBoot日志_第9张图片

  2. 搜索 Lombok
    SpringBoot日志_第10张图片
    每次都使用LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦 ,有⼀
    种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出

  3. 下载Lombok插件
    一定要下载此插件,不然无法使用 @slf4j 的 log对象
    SpringBoot日志_第11张图片
    1.添加 lombok 框架⽀持。
    2.使⽤ @slf4j 注解输出⽇志。

@Service // 在SpringBoot启动时加载当前类
@Slf4j // 引入日志框架
public class DemoService {

    @PostConstruct
    public void serviceLost() {
        System.out.println();
        log.error("通过lombok日志框架+@slf4j日志框架实现更简单日志打印");
        System.out.println();
    }
}

注意:
使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这
是 lombok 提供的对象名

启动SpringBoot运行结果

在这里插入图片描述

7. Lombok原理

lombok 能够打印⽇志的秘密就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如

对比上面的Java源代码,发现源代码里并没有写,只有一个 @Slf4j,就是这个@Slf4j注解 ,在代码编译期间起到了关键作用,Lombok在编译期间把 Slf4j替换成立相应的字节码文件,所以在 .class文件里没有@Slf4j注解

SpringBoot日志_第12张图片

SpringBoot日志_第13张图片

8. lombok 更多注解说明

注解 作用
@Getter 自动动添加 getter 方法
@Setter 自动添加 setter方法
@ToString 自动添加 toString 方法
@EqualsAndHashCode 自动添加 equals和hashCode方法
@NoArgsConstructor 自动添加无参构造方法
@AllArgsConstructor 自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull 属性不能为 null
@RequiredArgsConstructor 自动添加必须属性的构造方法, final + @NonNull 的属性为必须

组合注解

注解 作用
@Data @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

你可能感兴趣的:(web后端,spring,boot,java,spring)