• Spring Boot 日志文件


    日志的作用

    日志在项目当中,最重要的就是发现和定位问题,然后其它功能如下:

    1. 记录用户登录日志,方便分析用户是否是正常登录,还是恶意破解登录。如果一个用户,一天登陆了几万次,那么就是在破解账户了。
    2. 记录系统的操作日志,方便数据恢复和定位操作人。比如说教务系统调课,一不小心调错了,就知道是谁调的。
    3. 记录程序的执行时间。记录项目的执行时间,然后针对进行优化。如果长时间没访问到某个资源的话,就可以去查看代码是否有问题。

    日志的使用

    在我们启动项目的时候,就已经输出日志了:
    在这里插入图片描述
    不过这些日志事不能保存下来的,是只能显示在控制台的。说明 Spring Boot 内置了日志框架。默认情况下是输出系统日志。

    自定义日志打印

    要实现自定义日志打印,有两步:

    1. 在一个类中先获取到日志打印对象(日志框架提供的日志对象,而日志加已经默认集成到 Spring Boot 当中了)。
    2. 使用日志对象提供的方法实现日志的打印。

    通过类来得到日志对象

    通过 Logger 类来得到日志对象,使用 slf4j 提供的日志对象:
    在这里插入图片描述

    private final static Logger log = LoggerFactory.getLogger(UserController.class);
    
    • 1

    把类名传进去,是为了更好的查看日志输出的时候,是从哪个类里面输出的。然后就可以在方法里面,使用日志对象提供的打印方法来进行日志打印了。

    使用日志对象打印日志

    ⽇志对象的打印⽅法有很多种(info,error,warn,trace,debug):

    @Controller
    @ResponseBody
    public class UserController {
        //1、先得到日志对象,一定要设置当前类的类型
        private final static Logger log = LoggerFactory.getLogger(UserController.class);
    
        @RequestMapping("/sayhi")
        public void sayHi() {
            //2、使用日志对象提供的打印方法进行日志打印
            log.trace("track 日志级别最小的一种,少许日志");
            log.debug("debug 调试阶段打印日志,调试日志");
            log.info("info 普通的打印信息,默认的日志级别");
            log.warn("warn 警告日志");
            log.error("error 错误日志");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果如下:
    在这里插入图片描述

    常用的日志框架

    Spring Boot 当中,我们主要用的是 SLF4J 和 logback :
    在这里插入图片描述
    因为 SLF4J和 logback 在日志领域是顶尖的。

    1. 门面模式就是在类操作的时候,操作的是代理对象,就像 JDBC 对数据库的操作一样,不论什么数据库,都能进行操作。SLF4J 也是驱动某一个日志来进行打印。
    2. 然后通过 SLF4J 之后,再通过 logback 来打印日志。
      在这里插入图片描述
      如果 logback 出问题之后,是可以随便调用其他方法去输出日志的。对于普通的测试日志和业务日志就可以忽略了,从而节省开发者信息筛选时间。

    日志级别

    日志级别的作用

    1. 可以筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了。
    2. 可以控制不同环境下,一个程序是否需要打印日志。如开发环境,我们需要详细的信息,而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。

    ⽇志级别的分类与使⽤

    日志级别分为

    1. trace:微量,少许的意思,级别最低
    2. debug:需要调试时候的关键信息打印(调试日志)
    3. info:普通的打印信息(普通信息日志)【系统默认的日志级别】
    4. warn:警告,不影响使⽤,但需要注意的问题(警告日志)
    5. error:错误信息,级别较⾼的错误⽇志信息(错误日志)
    6. fatal:致命的,因为代码异常导致程序退出执⾏的事件。

    日志级别的顺序

    在这里插入图片描述

    设置日志级别

    通过 配置文件 当中来设置。通过 logging.level 来设置级别:
    在这里插入图片描述
    我们这里设置的是 info 级别,root 就是全局的日志级别:
    在这里插入图片描述
    可以明显的看出,日志的数量更多了。比 info 日志级别低的日志就看不到了。

    设置局部文件的日志级别:

    logging.level.java.com.example.springboot2.controller=trace
    
    • 1

    就是通过路径去设置,但是在局部级别的话,是局部优先:
    在这里插入图片描述

    日志持久化

    上面的日志都是输出在控制台上面的,然而生存环境需要把日志保存下来,以便出现问题之后追溯问题。也就是将日志持久化:

    1. 在配置文件当中设置日志的保存路径,当设置类保存路径之后,那么日志就会自动的进行持久化。

      logging.file.path=D:/
      
      • 1

      就是把日志文件直接保存在 D 盘当中:
      在这里插入图片描述

      也可以用反斜杠转义:

      logging.file.path=D:\\
      
      • 1
    2. 在配置文件中设置日志保存的名称,日志就会自动进行持久化:

      logging.file.name=D:/spring-boot.log
      
      • 1

      日志太大的时候,会自动进行分割:
      在这里插入图片描述

    通过 lombok 进行日志输出

    要输出日志的话,出了使用 日志对象,还可以使用 lombok 提供的 @Slf4j 注解,注解自动生成的对象是 log:

    @Controller
    @ResponseBody
    @Slf4j
    public class UserService {
    
        @RequestMapping("/sayhi2")
        public void sayHi2() {
            log.trace("Lombok trace");
            log.debug("Lombok debug");
            log.info("Lombok info");
            log.warn("Lombok warn");
            log.error("Lombok error");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果如下:
    在这里插入图片描述
    文件如下:
    在这里插入图片描述

    lombok 原理

    我们的项目在编译的时候,是转化为 class 文件,然后让 JVM 来处理的。也就是在项目编译的时候,lombok 就又替我们转化为原来的日志对象了:
    在这里插入图片描述

    Java程序运行图和lombok作用图

    Java 程序的运行原理图:
    在这里插入图片描述
    lombok 的作用图:
    在这里插入图片描述
    Lombok 并不会影响程序的运行速度,提高了开发效率。

    Lombok 的其他注解

    基本注解
    在这里插入图片描述
    组合注解
    在这里插入图片描述
    日志注解
    在这里插入图片描述

  • 相关阅读:
    LeetCode_二叉搜索树_简单_108.将有序数组转换为二叉搜索树
    外贸催款邮件怎么写才算好?内有模板和技巧
    python循环引用解决 cannot import partially initialize
    java基于springboot+nodejs+vue网上投标招标系统ssm项目介绍
    设计模式-访问者(Visitor)模式介绍和使用
    基于Web的盾构机盾尾变形远程监测系统
    MySql基础篇——窗口函数和公用表达式
    企业内业务系统与Activiti流程引擎的结合(十二)
    正则表达式
    编程自学路线:开源免费的教育资源 | 开源专题 No.40
  • 原文地址:https://blog.csdn.net/sjp151/article/details/126848051