【JavaEE】Spring Boot 开发要点总结(3)
文章目录
- 【JavaEE】Spring Boot 开发要点总结(3)
- 1. 日志有什么作用
- 2. 日志格式
- 2.1 日志框架原理
- 3. 日志的打印
- 3.1 System.out.println
- 3.2 使用日志框架
- 3.3 日志级别
- 3.3.1 设置默认日志显示阈值
- 3.3.2 针对一个目录设置日志显示阈值
- 4. 日志持久化
- 4.1 设置日志保存路径
- 4.2 设置日志打印格式
- 4.3 设置日志文件名
- 4.4 面临的问题
- 5. lombok框架
- 5.1 节省重复简单代码的书写
- 5.2 快速读写日志文件
- 5.3 lombok实现原理
写代码不是概率事件,bug的出现必然是有原因的,而日志的主要作用就是,排查和定位问题!
除此之外,我们还能实现以下功能:
例如,启动项目的时候,控制台显示的就是,日志,标准的日志:
而且这些标准的日志,都是有固定格式的~
三个问题:
- Spring Boot 内置了日志框架,才能按照固定格式输出日志, 这些信息代表什么呢?
- 格式并不需要开发者去设计
- 默认情况下,项目输出的日志并非开发者自定义和打印的,Spring框架在运行时会自动打印一些日志, 如何自定义打印日志呢?
- 格式有了,内容和打印时机还是需要自定义的
- 日志默认是打印在控制台, 如何实现持久化呢?
- 控制台的,重新运行就会清空,日志得保存下来,才有意义,后续才能查阅
这就是日志框架提供的格式,提供的信息还是很全面的!
Spring Boot之所以可以打印日志,是因为内置了两个日志框架:
为什么需要两个呢?
而这里,多种底层实现日志相关操作的框架统一支持slf4j,开发者统一地使用开发API,底层怎么实现日志相关操作的与开发者无关
后面设置日志级别,通过日志级别筛选 …等操作,底层由框架帮我们去实现,对于开发者,这些“坐享其成”的事太多了,我们要专心开发,不必可以他们的存在
这是我们普通java程序的日志打印方式,效果平庸,信息很少:
运行后,浏览器访问:
查看控制台:
如果要打印时间:
效果:
其他的信息获取和组织起来就更加麻烦了~
并且对于后面第三个持久化的问题,sout的日志无法持久化保存
程序能够启动并且能打印日志,就什么这个框架已经引入进来了,只需要以下操作:
一定要选择,slf4j框架的类
访问一下试试:
可见,通过框架提供的API,就可以有效地设置日志级别,方法名对应的就是日志级别~
但是,为什么我们打印了五条,却只显示三条呢?
从上到下,日志级别递增!
而系统如何筛选日志的呢?
而我们去筛选的话,就是根据这个原理,去设置默认显示阈值
效果:
效果:
日志级别的作用就是:过滤信息
根据其他信息进行筛选排查的话,之后需要用到就去学~
要求:对于controller目录,显示阈值为info;对于model目录,显示阈值为error
效果:
日志持久化,就是把日志保存到文件里,也就是保存到电脑磁盘里,后续在文件里去观看,可以通过文本编辑器进行一些查找查看~
配置项不懂的,可以去官方文档中解惑:Common Application Properties (spring.io)
不需要设置“要不要保存”的选项,因为设置了后还是需要给一个保存路径,还不如直接设置路径,就代表了两种含义
控制台:
文件目录:
多按几下浏览器刷新:
以追加的方式更新:
比如这个毫秒,我不喜欢,我要把他去掉:
效果:
并不会更新之前的内容,而是往后去追加~
log文件修改后不能保存,只能另存为或者选择替换原本的文件
好像不符合预期猜想,key.log在哪:
原来在这儿~
所以path和name不能搭配~
而name对应的被认为是相对路径,就保存到项目目录里了
给文件设置极限大小
当然,这些效果的实现,不止这一种做法,也还有更多的效果可以实现,可以去官方文档中阅读学习,之后遇到需要实现的效果,专门去查即可
Lombok虽然不是IDEA的“兄弟产品”,但是却能摆在一开始选择依赖的页面里:
说明这并不是等闲之辈,很多公司都在用
而它出现就是为了快速开发java项目的!
对于这些老朋友方法,我们再熟悉不过了,这些代码的特点就是,必要但是简单并且属性如果比较多,代码就会特别长
而Lombok框架提供的注解,很好的解决了这个问题:
下载lombok插件和引入依赖:
其实在创建项目的时候就引入了,并且如果没有安装插件,也会自动帮你安装~
注解介绍:
属性越多,构造方法的个数呈阶乘倍数增加,所以全部都加上是不现实的,并且没多大必要,并不需要每个都存在~
如果你觉得不够简洁,还可以用 注解@Data,它等同于:
@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor
等于这一整套~
同样的,用到注解
这样后,在类的内部就可以直接使用一个静态常量 log 了,代表的就是日志制造器
java程序执行的流程:
而Lombok就是在编码的时候,减轻了.java用户代码的负担:
我们没有书写对应的 log 以及Getter和Setter…,但是Lombok帮我们在.class里去添加了对应的字节码:
而那个小辣椒插件,是不可或缺的存在,因为没有它,我们在开发阶段,就会被系统判定没有对应的定义,以至于爆红,没有题词…
文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭!代码位置:spring_boot_demo2/src/main · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)