Spring_boot的热部署
引入依赖
<dependency> |
Idea设置自动编译
- Idea设置自动部署 ctrl+shift+alt+/ 快捷键
- 重新编译后启动,当再次更改代码 控制台刷新后,再次通过浏览器发送的http请求,就能得到最新的结果
java中日志系统的发展/作用
- 记录日志到本地文件
- 按天或者文件大小记录到多个文件
- 出现异常立马短信通知用户,不需要运维或者用户自己主动发现
- 按日志等级来区分,不同日志列别分到不同的日志文件
- io异步,日志输出的格式可以自定义
这就是log4j,它进行开源后,其它开发者进行更新
JDK当时并没有收录log4j,后来被apatch基金会收纳
后来JDK官方出版了官方的日志系统,JUL java.util.logging
后来市面上的日志框架非常混乱,
JDK官方提供了日志门面,JCL,不提供实现日志功能,整合日志(它的原理是通过类加载器,来判定是否存在相关的日志接口的实现,如果存在,则使用,不存在,则继续查找其他的)
Logj作者发现官方提供的jcl并不好用,后来独自开发了日志门面,slf4j(它里面比较重要的是适配器和桥接器),
适配器:将其它的日志转换到slf4j
桥接器:slf4j用拿一个具体的实现,来日志记录
总结:适配器是对外的其它日志工具的适配,桥接器,是slf4j内部找到logbak具体的实现来进行日志记录;
Log4j2:基于log4j提升了性能,进行了升级有了log4j2
Logbak:log4j作者基于初版log4j来进行的性能优化进行了升级
日志实现 | 日志门面 |
Log4j | Slf4j |
jul | jcl |
Log4j2 | |
logbak |
注:标红为推荐,原作者开发出来的,springboot也是用的这一套
Spring_boot日志依赖
Spring底层的日志记录是jcl,所以springboot把jcl的实现,添加了适配器,转到slf4j上,然后进行统一管理。
Spring_boot日志记录级别
TRACE<DEBUG<INFO<WARN<ERROR<FATAL或OFF之一,设置级别后,只有高于该级别的才会输出;
Lombok工具记录日志
首先,添加lombok的依赖,然后idea如果不支持lombok还得下载插件,而且lombok是和JDK版本,它的更新速度没有那么快,添加@Slf4j注解后,可以直接使用,但是实际开发中,只要有一个人用了这个,所有的开发人员都需要配置,所以不太建议;
Spring_boot自带记录日志
注意:这里的logger是org.slf4j.logger
Spring_boot默认日志级别,以及控制日志级别的细粒度
Spring_boot默认级别为info,所以spring_boot的其它包下的记录只有info级别,而我们自定义的com.chenlei包下的级别为trace,所以它记录了所有的级别日志;
Spring_boot日志格式
官网说明:Core Features
官网中查到的日志格式:
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} |
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint}解析:
%clr {faint}:表示中间的内容颜色,faint表示为无颜色
${value1:value2}:表达式为,如果value1有值,则取value1,没有则取value2,
LOG_DATEFORMAT_PATTERN:表示取当前系统环境变量,它也对应了spring_boot中的配置,意思是可以在配置文件中,没有定义则是默认格式-yyyy-MM-dd'T'HH:mm:ss.SSSXXX
%d{}:是logbak用来定义日期格式的,因为spring_boot的log的实现用的是logbak
Logback中文说明:
Logback 中文文档 - 第四章:Appender | Docs4dev
2024-02-11 21:36:36.279 INFO 31180 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
Spring_boot日志文件输出
Spring_boot提供两个配置,一般是都用name,来进行自定义文件名
logging.file.path:只能指定路径,文件名是默认的文件名
Logging.file.name:能用路径+文件名的格式自定义文件名
logging: |
Spring_boot日志文件归档,可以定义日志文件的最大size,和最大的文件数量等
轮转日志文件格式 | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz |
${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz:
${LOG_FILE}:文件名
.%d:{yyyy-MM-dd}:日期格式
.%i:文件的下标,1,2,3....
.gz:历史日志会议压缩包的形式被打包
这个是默认的格式,也可以根据需要自定义格式
Spring_boot日志文件高级功能
以下只例举了两种特别的功能,需要用到spring-logback.xml才能使用,其它可以直接使用logback.xml,更多功能,比如产生报警日志,直接发邮件到用户等可以详细参考logback的中文网中的中文文档
Logback 中文文档 - 第四章:Appender | Docs4dev
注意:只要是使用了下面两种文件的其中一种,spring_boot的application文件中的日志配置就会失效,也就是优先级单独的日志文件会更高;
将不同级别的文件输出到不同的文件中
也可以引用主文件中的配置,还能结合spring_boot中的profile来根据不同环境进行生效
,不过这个就需要用另一个spring-logback.xml才行
Application.yml
Logback-spring.xml
Spring_boot日志框架切换
Spring_boot提供了log4j和logback场景启动器,都是高效的日志记录框架
当同时有log4j和logback日志框架的依赖,需要手动排除一个桥接器,添加一个桥接器会自动引入日志的实现,exclude,log4j2和logback的日志文件不完全通用,使用不同的slf4j的实现,需要重新配置