JavaEE进阶第六课:SpringBoot ⽇志⽂件

上篇文章介绍了SpringBoot配置文件,这篇文章我们将会介绍SpringBoot ⽇志⽂件

荔枝

  • 1.日志有什么用
  • 2.自定义日志输出
    • 2.1获取程序日志对象
    • 2.2使用相关方法输出日志
    • 2.3日志级别
      • 2.3.1日志级别的作用
      • 2.3.2日志级别如何设置
    • 2.4日志格式
  • 3.持久化日志
  • 4.更简单的日志输出
    • 4.1使用Lombok进行日志输出
    • 4.2Lombok更多注解
  • 结尾

1.日志有什么用

日志主要是我们程序运行时的一些相关信息,比如启动端口,报错信息什么的,我们SpringBoot项目运行时(因为SpringBoot内置了日志框架),就会输出一些日志:
在这里插入图片描述
那么它有什么用呢?想象一样,如果没有日志信息,当我们的应用程序出现问题时,我们怎么定位问题出现在哪呢?类和方法那么多,我们一个一个排除肯定是来不及的,所以日志的信息就尤为重要,可以帮助我们快速定位问题源头。
但是上图的日志是默认的,并不是我们定义的,那么怎么才能自定义日志并输出呢?

2.自定义日志输出

2.1获取程序日志对象

再输出日志之前,我们要先从当前程序获取日志对象

public static Logger logger=LoggerFactory.getLogger(.class);

这里去除了大量参数,但是保留了是类对象,因为这样你才知道这个日志来自哪个类!
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第1张图片
注意,Logger这个类来自org.slf4j 包下的,不要导⼊错包

2.2使用相关方法输出日志

Logger中有很多类,对应了不同等级的日志信息,我们常用的方法:

        logger.trace();
        logger.debug();
        logger.info();
        logger.warn();
        logger.error();
        //里面可填不同的参数

这里我们写一段代码测试一下:

@ResponseBody
@RequestMapping("user")
@Component
public class LogDemo {
    public static Logger logger=LoggerFactory.getLogger(LogDemo.class);

    @RequestMapping("demo")
    public void test(){
        logger.trace("i am trace");
        logger.debug("i am debug");
        logger.info("i am info");
        logger.warn("i am warn");
        logger.error("i am error");
    }
}

运行得到结果:
在这里插入图片描述
我们发现明明写了五个方法,怎么只输出了后三个?这是因为SpringBoot输出的日志大于等于当前日志等级的,我们没有设置,默认就是info。

2.3日志级别

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

2.3.1日志级别的作用

日志有了级别,我们就能快速找到注意的错误信息,减少查错时间,同时因为只输出高等级的日志也能减少我们日志文件的大小,否则一个日志就几个G,找错要找到什么时候

2.3.2日志级别如何设置

设置日志级别是在配置文件中修改,主要分为两种设置:
1.设置全局

logging:
  level:
    root: debug

在这里插入图片描述
这里我们就把默认的日志级别改成debug了
2.设置局部
有时,我们的日志的需求,可能是这个类为debug,另一个类为warn这种,全局设置肯定不行,这里就需要设置单独的类或者包的日志级别:
(这里设置一个类为warn,一个为info)

logging:
  level:
    root: info
    com:
      example:
        demo:
          test:
            LogTest: warn

这里的root是根目录,com等都是包名,LogTest是类名:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第2张图片

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

2.4日志格式

那么我们的日志是输出了,但是它各部分都有什么含义呢?我们来深入了解一下:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第3张图片

3.持久化日志

看到这里,我们的日志自定义日志确实输出了,但是它是输出在控制台上的,也就是我们的程序重新启动它就消失了,这样的话,和System.out.printf()直接打印好像没什么区别,想要持久化的存储日志就要把它保存至硬盘上。
只需要在配置文件中设置一下即可:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第4张图片
点击运行,打开path对应文件夹,发现多了一个文件spring.log,打开即可看到我们的日志
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第5张图片
这里我们的path只是设置了目录,并没有指定到一个文件,那如何指定文件呢,配置项path要更换成配置项name(文件名称)
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第6张图片
没有这个文件也没关系,它会自动帮你生成的:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第7张图片

4.更简单的日志输出

4.1使用Lombok进行日志输出

获取程序日志对象的代码,可以发现:

public static Logger logger=LoggerFactory.getLogger(.class);

如果类多的情况下,这个代码出现的频率也高,本身这代码看起来就挺繁琐的,因为每个类基本上就类.class不同,能不能简化它呢?当然可以!这里就要用到我们的神器Lombok,可以通过其中的一个注解@Slf4j,帮助我们构建日志对象log:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第8张图片
这样就方便多啦!
为什么一个小小的注解就能帮助我们构造日志对象?我们编译代码生成.class文件后,观察LogDemo.class,可以发现:
JavaEE进阶第六课:SpringBoot ⽇志⽂件_第9张图片
@Slf4j没有了,取而代之的是我们熟悉的“它”。

4.2Lombok更多注解

基础注解:

@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

结尾

今天的日志学习就到这里啦!下一期进入SpringMVC的学习哦!

你可能感兴趣的:(JavaEE进阶,spring,boot,java-ee,java,后端,spring)