Spring 日志体系

 

主流的log技术名词

  • log4j
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
</dependency>

可以不需要依赖第三方的技术,直接记录日志

  • jcl

jakartaCommonsLoggingImpl

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>

jcl他不直接记录日志,他是通过第三方记录日志(jul)

 

如果使用jcl来记录日志,在没有log4j的依赖情况下,是用jul

如果有了log4j则使用log4j

jcl=Jakarta commons-logging ,是apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象方法即接口(info,debug,error.......),底层通过一个数组存放具体的日志框架的类名,然后循环数组依次去匹配这些类名是否在app中被依赖了,如果找到被依赖的则直接使用,所以他有先后顺序。

 

上图为jcl中存放日志技术类名的数组,默认有四个,后面两个可以忽略。

上图81行就是通过一个类名去load一个class,如果load成功则直接new出来并且返回使用。

如果没有load到class这循环第二个,直到找到为止。

可以看到这里的循环条件必须满足result不为空,

也就是如果没有找到具体的日志依赖则继续循环,如果找到则条件不成立,不进行循环了。

总结:顺序log4j>jul

 

  1. jul

java自带的一个日志记录的技术,直接使用

  1. log4j2
  1. slf4j

slf4j他也不记录日志,通过绑定器绑定一个具体的日志记录来完成日志记录

log4j---<artifactId>slf4j-log4j12</artifactId>

  1. logback
  1. simple-log

 

各种日志技术的关系和作用

spring日志技术分析

 

spring5.*日志技术实现       依赖spring-jcl

spring5使用的spring的jcl(spring改了jcl的代码)来记录日志的,但是jcl不能直接记录日志,采用循环优先的原则

源码获取log

static {
        logApi = LogFactory.LogApi.JUL;
        ClassLoader cl = LogFactory.class.getClassLoader();

        try {
            cl.loadClass("org.apache.logging.log4j.spi.ExtendedLogger");
            logApi = LogFactory.LogApi.LOG4J;
        } catch (ClassNotFoundException var6) {
            try {
                cl.loadClass("org.slf4j.spi.LocationAwareLogger");
                logApi = LogFactory.LogApi.SLF4J_LAL;
            } catch (ClassNotFoundException var5) {
                try {
                    cl.loadClass("org.slf4j.Logger");
                    logApi = LogFactory.LogApi.SLF4J;
                } catch (ClassNotFoundException var4) {
                }
            }
        }

spring4.*日志技术实现

spring4当中依赖的是原生的jcl   依赖commons-logging.jar

 

 

分析为什么jcl不记录日志,修改代码

不同的桥接器见官网

 

架构系统如何考虑日志

old:jcl+log4j

new:slf4j+jul

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值