SpringBoot之日志(十三)

本文深入探讨了日志框架的发展历程,从System.out.println的原始打印方式到SLF4J+Logback的最佳实践组合,涵盖了JUL、Log4j、Logback、Log4j2等主流日志框架的功能对比及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志介绍

1、具体日志功能的实现有以下几种

JUL

Log4j

Logback

Log4j2

 

Logback的实现类Logger,实现了slf4j的Logger接口

 

 

 

2、日志门面框架:

日志实现的抽象层,定义log的Info,debug这些方法。

JCL

SLF4J

如下图,SLF4J定义了一些trace,debug等方法

 

 

3、日志的发展历史

1) JDK1.3及以前,通过System.(out|err).pringln 打印,存在巨大缺陷。(如没有办法定制化,日志粒度不够细,没有日志级别等)

2) 解析系统打印缺陷问题出现log4j, 2015年8月停止更新

3)受到log4j影响,SUN公司推出java.util.logging即JUL

4)由于存在两个系统实现,解决兼容性问题,推出commons-logging(门面框架),即JCL,但存在一定的缺陷。(对log4J和JUL的配置兼容问题处理的不是很好。)

5)log4j作者推出slf4j(门面框架),功能完善兼容性好,成为业界主流

6)log4j作者在推出log4j后进行新的改进思考推出logback

7) log4j2对log4j的重大升级,修复移植缺陷,极大提升性能

综上所述,最佳组合 slf4j+ logback(springboot使用), slf4j+ log4j2

 

一般使用logger的方式为

private Logger logger = LoggerFactory.getLogger(MybatisStartTest.class);

进入getLogger

public static Logger getLogger(Class<?> clazz) {

    Logger logger = getLogger(clazz.getName());

    if(DETECT_LOGGER_NAME_MISMATCH) {

        Class<?> autoComputedCallingClass = Util.getCallingClass();

        if(autoComputedCallingClass != null && nonMatchingClasses(clazz, autoComputedCallingClass)) {

            Util.report(String.format("Detected logger name mismatch. Given name: \"%s\"; computed name: \"%s\".", new Object[]{logger.getName(), autoComputedCallingClass.getName()}));

            Util.report("See http://www.slf4j.org/codes.html#loggerNameMismatch for an explanation");

        }

    }


    return logger;

}

1、进入getLogger(clazz.getName());

public static Logger getLogger(String name) {

    ILoggerFactory iLoggerFactory = getILoggerFactory();

    return iLoggerFactory.getLogger(name);

}

 

2、进入getILoggerFactory

3、进入performInitialization方法

 

4、   进入bind方法

 

7. 如果存在多个日志框架打印提示及选择

 

5、然后进入findPossibleStaticLoggerBinderPathSet方法。获得StaticLoggerBinder所在jar包路径

 

6、将路径增加到staticLoggerBinderPathSet集合中。

 

这个就是log的寻址过程。

 

8、StaticLoggerBinder 这个类存在于logback中,通过这个类获得日志工厂再得实现。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值