Spring Boot 日志文件

Spring Boot 日志文件

  • 日志的作用
  • 日志的使用
  • 自定义日志打印
    • 通过类来得到日志对象
    • 使用日志对象打印日志
    • 常用的日志框架
  • 日志级别
    • 日志级别的作用
    • ⽇志级别的分类与使⽤
      • 日志级别分为
    • 日志级别的顺序
    • 设置日志级别
  • 日志持久化
  • 通过 lombok 进行日志输出
    • lombok 原理
    • Java程序运行图和lombok作用图
    • Lombok 的其他注解

日志的作用

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

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

日志的使用

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

自定义日志打印

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

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

通过类来得到日志对象

通过 Logger 类来得到日志对象,使用 slf4j 提供的日志对象:
Spring Boot 日志文件_第2张图片

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

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

使用日志对象打印日志

⽇志对象的打印⽅法有很多种(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 错误日志");
    }
}

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

常用的日志框架

Spring Boot 当中,我们主要用的是 SLF4J 和 logback :
Spring Boot 日志文件_第3张图片
因为 SLF4J和 logback 在日志领域是顶尖的。

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

日志级别

日志级别的作用

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

⽇志级别的分类与使⽤

日志级别分为

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

日志级别的顺序

Spring Boot 日志文件_第5张图片

设置日志级别

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

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

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

就是通过路径去设置,但是在局部级别的话,是局部优先:
Spring Boot 日志文件_第7张图片

日志持久化

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

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

    logging.file.path=D:/
    

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

    也可以用反斜杠转义:

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

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

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

通过 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");
    }
}

运行结果如下:
Spring Boot 日志文件_第8张图片
文件如下:
在这里插入图片描述

lombok 原理

我们的项目在编译的时候,是转化为 class 文件,然后让 JVM 来处理的。也就是在项目编译的时候,lombok 就又替我们转化为原来的日志对象了:
Spring Boot 日志文件_第9张图片

Java程序运行图和lombok作用图

Java 程序的运行原理图:
Spring Boot 日志文件_第10张图片
lombok 的作用图:
Spring Boot 日志文件_第11张图片
Lombok 并不会影响程序的运行速度,提高了开发效率。

Lombok 的其他注解

基本注解
Spring Boot 日志文件_第12张图片
组合注解
在这里插入图片描述
日志注解
在这里插入图片描述

你可能感兴趣的:(JavaEE,spring,boot,java,spring,日志,Lombok)