Spring Boot日志文件

Spring Boot的日志实现才有了日志门面+日志实现框架的模式。和数据库一样,日志实现框架有很多的厂商或者个人开发了,所以日志有很多种实现框架,每种框架的api都不相同,所以一个项目要切换日志的框架将非常的麻烦,所以有了日志门面。

日志门面使用了一种api,但是可以驱动不同的日志实现框架,和JDBC类似。

常用的日志实现框架:log4j 1/2,JUL,logback。

常用的日志门面:commons-logging,SLF4J。

Spring Boot采用的就是logback+SLF4J的组合。

一、日志的结构

每次启动Spring Boot项目,打印在终端显示器上的信息就是日志。

二、日志的等级

日志有六个等级,从低到高为:trace,debug,info,warn,error,fatal。

默认打印的日志等级时info及其以上的日志。

可以再配置文件中配置默认的日志等级:

配置的key值为:logging.level.root,想要配置成哪个等级就将value值设置为哪个等级的名字:

上面的配置就是将java根目录下的所有java默认打印日志都设置为debug。

也可以选中更加细化的日志等级进行设置,就是logging.level.文件路径。对应文件路径下的日志打印就被设置了。

比如:

这样就将com.example.demo目录下的所有文件的默认日志打印级别设置为了debug。

注意:fatal级别的日志代表发生了让系统崩溃的错误,系统都崩溃了,fatal日志也就没有必要在终端打印出来了,所以fatal级别的日志是不能打印的,但是fatal级别的日志可以被记录下来,放在磁盘中,用来分析错误原因。

三、打印日志

  1. 获取日志对象。
    为了方便打印,一般是一个类里面一个日志对象,每个方法要打印日志就调用这个日志对象。所以这个对象要是static的,并且因为这个对象不能被修改,所以要是final修饰的。
    日志对象类名叫做Logger

    可以看到有很多个Logger类,因为要使用日志门面SLF4J来操作日志框架,所以要选择SLF4J包下的Logger。
    日志对象的创建不是直接new,而是通过工厂类LoggerFactory的getLogger去创建日志对象。
    getLogge的参数有两个:String和Class
    传入String类型就是将打印出来的日志结构中类路径换成传入的String变量。
    传入Class类型就是将传入Class的路径作为最终打印的出来的类路径。

    一般选择传入当前类的Class对象。
  2. 打印日志
    虽然日志有六个级别,但是打印日志只有五个方法,因为fatal级别的日志不能打印。

四、日志的持久化

前面说了,fatal级别的日志虽然不能被打印下来,但是可以被记录到磁盘上,将日志记录到磁盘上,就是将日志持久化的过程。

  1. 配置日志的文件的路径和名称
    logging.file.path和logging.file.name
    • 通过配置logging.file.path属性来指定配置文件的路径,只要配置了路径,首次启动项目时,就会创建一个日志文件,之后每次启动都是往这个文件里面追加数据。不会覆盖。
    • 也可以只配置logging.file.name
      复制对应的文件名,然后就会将这个日志文件默认创建到此项目文件夹下,也可以指定路径,就可以保存到对应文件夹下。
  2. 配置日志的文件的最大大小
    • 由于日志文件内容是一直被追加的,所以日志文件就不可避免的会一直增大,当一个文件大到一定程度,打开这个文件会是非常困难的事,特别是日志这种需要多次查看的文件,所以为了让日志文件保持在一定大小,可以通过配置日志文件的最大大小来调节
      默认的最大大小是10mb,当日志文件到达最大大小时,系统会自动创建一个新的日志文件存储之后的日志。
      此时,即使配置文件中设置了日志文件的名称,但是由于原本的日志文件已经装满了,所以系统会使用默认的新的文件,这个文件名会是原本文件名-x

五、使用lombok的注解快速的引入日志对象

在上面的打印日志的实际代码编写中我们发现,我们每个要打印日志的类都需要引入一个日志对象,这个引入的对象的代码又有点长,并且还只是在传参那一步的参数有一点差别,所以可以使用lombok的@SLF4J注释引入一个用此类的class文件作为参数的日志对象。

这个被lombok引入的日志对象的名字默认为log。

相关推荐
古城小栈9 分钟前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
华仔啊12 分钟前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
MapGIS技术支持20 分钟前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_23 分钟前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
码事漫谈39 分钟前
国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
后端
上进小菜猪1 小时前
当时序数据不再“只是时间”:金仓数据库如何在复杂场景中拉开与 InfluxDB 的差距
后端
盖世英雄酱581362 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
济南壹软网络科技有限公司2 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app
廋到被风吹走2 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式
一条可有可无的咸鱼2 小时前
企业招聘信息,企业资讯进行公示
java·vue.js·spring boot·uni-app