springboot核⼼技术之⽇志管理(三)⼀、常见的⽇志框架
常见⽇志框架:JUL、JCL、Log4j、Log4j2,Logback、SLF4j、Jboss-logging
⽇志门⾯(⽇志的抽象)⽇志实现
JCL(Jakarta Commons Logging)
SLF4j(Simple Logging Facade for java)
jboss-logging Log4j
JUL(java.util.logging) Log4j2
Logback
企业级开发⽇志选择:
⽇志门⾯:SLF4j;
⽇志实现:Log4j、Logback;
Log4j2功能⾮常强⼤,但是设计⽐较复杂并且没有⽇志门⾯与之相匹配,作为企业级⽇志会存在不稳定的问题;
⽇志选择逻辑:⽇志门⾯+⽇志实现,运⾏⽇志时调⽤的是⽇志门⾯的接⼝,但是配置采⽤的是⽇志实现的配置。
springboot⽇志选择:spring框架默认采⽤的是JCL⽇志门⾯,所以springboot底层默认排除了spring框架采⽤的JCL
⽇志门⾯:SLF4j;
⽇志实现:Logback;它相对于Log4j来说更加的强⼤功能更加齐全。
⼆、⽇志门⾯+⽇志实现依赖包组合选择
1、经典依赖包组合图
SLF4j:只导⼊SLF4j的jar包,没有实现⽇志,⽇志功能单⼀
SLF4j+Logback:导⼊slf4j-api.jar和Logback相关jar包
SLF4j+Log4j:导⼊slf4j-api.jar、slf4j-log412.jar、log4j.jar三个jar包
SLF4j+JUL:导⼊slf4j-api.jar、slf4j-jdk14.jar、JUL相关jar包
SLF4j+slf4j-simple:导⼊slf4j-api.jar、slf4j-simple.jar
注意:1)SLF4j+Log4j相对于SLF4j+Logback多了⼀个jar包,多的这个slf4j-log412.jar是⽤来适配SLF4j和Log4j并整合它们;
2)每⼀个⽇志实现框架都有⾃⼰的配置⽂件,当选择好⽇志门⾯+⽇志实现依赖包组合后,⽇志最终以⽇志实现框架的配置来实现⽇志的相应功能。
2、统⼀⽇志框架
问题:springboot导⼊其它框架时其它框架⾃带了⽇志框架,这时我们需要将⼯程内所有框架的⽇志框架进⾏统⼀,使⽤springboot默认的⽇志框架。
常⽤框架⾃带⽇志:spring(Commons-logging)、Hibernate(Jboss-logging)、。。。。。
解决流程图如下:
统⼀⽇志的逻辑:1)先将引⼊框架的默认依赖包排除掉,如spring要排除Commons-logging的jar包; 2)再使⽤中间包取代原先的默认⽇志,如果不使⽤中间包则⽇志打印会出错;
3)导⼊ SLF4j的实现⽇志。
中间包替换表格:
要排除的默认⽇志框架中间⽇志框架
JCL(Jakarta Commons
jcl-over-slf4j.jar
Logging)
log4j API log4j-over-slf4j.jar
JUL(java.util.logging)jul-to-slf4j.jar
三、springboot ⽇志关系
1、springboot底层⽇志依赖关系
spring-boot-starter:默认实现了spring-boot-starter-logging依赖,spring-boot-starter-logging⽤来管理springboot的⽇志实现;如上图所⽰,我们可以看到spring-boot-starter-logging⼜默认实现了jul-to-slf4
j、log4j-over-slf4j、jcl-over-slf4j三个中间⽇志jar包以及Logback核⼼⽇志包;这四个⽇志jar包⼜继承了slf4j-api.jar⽇志门⾯。
springboot统⼀⽇志框架:1)其它框架排除⾃⾝默认框架,如spring要排除Commons-logging的jar包;
2)因为spring-boot-starter-logging默认实现了jul-to-slf4j、log4j-over-slf4j、jcl-over-slf4j三个 中间⽇志jar包,所以springboot会⾃动集成slf4j-api和Logback以及中间层⽇志包,这样其 它的框架如Mybatis的⽇志框架也就与⼯程默认⽇志框架同步了:slf4j-api + Logback
思考:springboot底层默认排除了spring的⽇志框架,所以springboot的⽇志框架组合默认是: slf4j-api + Logback
如下是spring-core的依赖:默认排除了spring的⽇志框架
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>springboot框架的作用
2、总结:springboot统⼀⽇志只需要将引⼊依赖包默认的⽇志框架排除即可
四、springboot默认⽇志配置
1、默认配置内容:⽇志级别从低到⾼分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL;Spring Boot中默认配
置ERROR、WARN和INFO级别的⽇志输出到控制台;⽇志默认输出在控制台,⽇志输出内容springboot底层已配置好,开箱即⽤。
2、application.properties⽂件中配置⽇志属性
logging.level.* : 作为package(包)的前缀来设置⽇志级别;⽇志级别从低到⾼分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL
logging.file :配置⽇志输出的⽂件名,也可以配置⽂件名的绝对路径。
logging.path :配置⽇志的路径。如果没有配置logging.file,Spring Boot 将默认使⽤spring.log作为⽂件名;当logging.file与logging.path同时存在时,springboot按照log sole :定义console中logging的样式。
logging.pattern.file :定义⽂件中⽇志的样式。
logging.pattern.level :定义渲染不同级别⽇志的格式。默认是%5p.
PID :定义当前进程的ID
3、根据不同的,springboot中你可以按如下规则组织配置⽂件名,就能被正确加载:
Logback:l, vy, l, vy
Log4j:log4j-spring.properties, l, log4j.properties, l
Log4j2:l, l
JDK (Java Util Logging):logging.properties
4、引⼊⾃定义的l⽂件,在properties⽂件夹中进⾏如下声明
5、springboot集成log4j:
⽅式⼀:
第⼀步:将log4j对应的中间⽇志框架log4j-over-slf4j.jar依赖清除掉;
第⼆步:将logback的依赖清除掉;
第三步:引⼊log4j及其适配层⽇志框架的依赖,最后log4j就能成功运⾏了。
⽅式⼆:
第⼀步:移除spring-boot-starter-logging依赖包;
第⼆步:添加spring-boot-starter-log4j依赖包,ok。
6、springboot的l配置内容:如果我们觉得springboot默认的配置内容满⾜不了我们的需求,我们也可以⾃定义logback
⽇志的xml对logback⽇志进⾏重新配置;
7、⾃定义l:springboot会⾃动加载此⽂件,详情请见本节中的第3⼩节
注意:springboot官⽅推荐使⽤l,相对于 l它的配置功能更加齐全,⽐如l可以配置profile
多环境⽇志,l则不能实现此功能
8、l语法结构请参考此博客:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论