【SpringBoot】讲清楚日志文件&&lombok
作者:mmseoamin日期:2023-12-11

文章目录

  • 前言
  • 一、日志是什么?
  • 二、⽇志怎么⽤?
  • 三.自定义打印日志
    • 3.1在程序中得到日志对象
    • 3.2使用日志打印对象
    • 四.⽇志级别
      • 4.1日志级别有什么用
      • 4.2 ⽇志级别的分类与使⽤
      • 五.日志持久化
      • 六.lombok
        • 6.1添加lobok依赖
        • 注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出, 这是 lombok 提供的对象名
        • 6.2lombok原理
        • 6.3lombok 更多注解说明
        • 总结

          前言


          提示:以下是本篇文章正文内容,下面案例可供参考

          一、日志是什么?

          ⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?

          答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。

          #除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

          1.记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。

          2.记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。

          3.记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

          4.以上这些都是⽇志提供的⾮常实⽤的功能

          二、⽇志怎么⽤?

          Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示

          在这里插入图片描述

          这个就是我们说的日志,说明日志在springboot里是内置好的,那么我们应该怎么怎么自定义打印日志呢

          三.自定义打印日志

          3.1在程序中得到日志对象

          在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,如下代码所示

          代码如下(示例):

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

          ⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类

          在这里插入图片描述

          在这里插入图片描述

          3.2使用日志打印对象

          ⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示

          在这里插入图片描述

          package com.example.demo.controller;
          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;
          @RestController
          public class LogController {
              // 1.得到日志对象
              private static Logger log =
                      LoggerFactory.getLogger(TestController.class);
              @RequestMapping("/log")
              public void log() {
                  String msg = "今天已经周二了。";
                  log.trace("trace -> " + msg);
                  log.debug("debug -> " + msg);
                  log.info("info -> " + msg);
                  log.warn("warn -> " + msg);
                  log.error("error -> " + msg);
              }
          }
          
          package com.example.demo.controller;
          import org.springframework.beans.factory.annotation.Value;
          import org.springframework.context.annotation.PropertySource;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.ResponseBody;
          import org.springframework.web.bind.annotation.RestController;
          import java.time.LocalDateTime;
          //@Controller
          //@ResponseBody
          @RestController
          @PropertySource(value = "classpath:application.properties",
                  encoding = "utf-8")
          public class TestController {
              @Value("${myimage.path}")
              private String myImage;
              @RequestMapping("/sayhi")
              public String sayHi() {
                  System.out.println(LocalDateTime.now() +" 日志 " +
                          "com.example.demo.controller.TestController");
                  return "你好,Spring Boot -> " + myImage;
              }
          }
          

          四.⽇志级别

          4.1日志级别有什么用

          1.⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。

          2.⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

          4.2 ⽇志级别的分类与使⽤

          ⽇志的级别分为:

          trace:微量,少许的意思,级别最低;

          debug:需要调试时候的关键信息打印;

          info:普通的打印信息(默认⽇志级别);

          warn:警告,不影响使⽤,但需要注意的问题;

          error:错误信息,级别较⾼的错误⽇志信息;

          fatal:致命的,因为代码异常导致程序退出执⾏的事件;

          在这里插入图片描述

          五.日志持久化

          在这里插入图片描述

          可以和我这样子配置

          在这里插入图片描述

          是在application.yml里写的,记得要俩个斜扛,一个是转义的

          六.lombok

          6.1添加lobok依赖

          
          org.projectlombok
          lombok
          1.18.20
          true
          
          

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

          这是 lombok 提供的对象名

          6.2lombok原理

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

          在这里插入图片描述

          在这里插入图片描述

          在这里插入图片描述

          6.3lombok 更多注解说明

          注解 作⽤

          @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

          总结

          今天的博客,希望大佬们能在评论指出错误!~~😘😘