目录
主流的log技术名词
log4j
- 可以不需要依赖第三方的技术,直接记录日志
- <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.x.xx</version>
</dependency>
jcl——Jakarta commons-logging
- jcl不直接记录日志,通过第三方记录日志(jul)
- 如果使用jcl来记录日志,在没有log4j的依赖情况下,是用jul
- 如果有了log4j则使用log4j
- apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象方法即接口(info,debug,error.......),底层通过一个数组存放具体的日志框架的类名,然后循环数组依次去匹配这些类名是否在应用中被依赖了,如果找到被依赖的则直接使用,所以他有先后顺序。
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>x.x.x</version>
</dependency> - 下图jcl中存放日志技术类名的数组,默认有四个
- 下图81行就是通过一个类名去load一个class,如果load成功则直接new出来并且返回使用。如果没有load到class这循环第二个,直到找到为止。
- 也就是如果没有找到具体的日志依赖则继续循环,如果找到则条件不成立,不进行循环了。
总结:顺序log4j>jul
jul
- java自带的一个日志记录的技术,直接使用
log4j2
slf4j
- slf4j他也不记录日志,通过绑定器绑定一个具体的日志记录来完成日志记录
- log4j---<artifactId>slf4j-log4j12</artifactId>
logback
simple-log
各种日志技术的关系和作用
spring日志技术分析
spring5.x 日志技术实现
- spring5使用的spring的jcl(spring改了jcl的代码)来记录日志的,但是jcl不能直接记录日志,采用循环优先的原则
spring4.x 日志技术实现
- spring4当中依赖的是原生的jcl