资讯专栏INFORMATION COLUMN

由日志打不出引出的知识图谱(一)

FullStackDeveloper / 1952人阅读

摘要:由日志打不出引出的知识图谱一当我们调用的时候发生了什么目前业界日志标配当我们调用的的时候到底发生了什么贴一张执行流程图这里出现了一个关键对象如果的局部变量值为就调用父进行日志打印结合实际场景解释一下上述是某个工程的的配置文件就是配置中

由日志打不出引出的知识图谱(一)
当我们调用Logger.error的时候发生了什么

目前业界日志标配slf4j + logback,当我们调用slf4j的Logger.error()的时候到底发生了什么?贴一张Logger执行流程图

这里出现了一个关键对象AppenderAttachableImpl,如果Logger的局部变量值为null,就调用父Logger进行日志打印,结合实际场景解释一下

    


    
          .....
    

    
          .....
    

    
        
    
    
    
        
    

上述是某个工程的logback.xml的配置文件,AppenderAttachableImpl就是配置中的appender元素节点的抽象,那么对如果Logger局部变量AppenderAttachableImplnull,则调用父Logger,这里的父Logger就是代表ROOT节点的Logger实例

接下来关注另外一个问题Logger局部变量AppenderAttachableImpl什么才为null,来看下Logger的创建过程,根据Logger logger = LoggerFactory.getLogger("name");定位到类ch.qos.logback.classic.LoggerContext构造方法

在构造方法中创建了ROOT Logger实例,接下来看下实际创建Logger实例代码

如果loggerCache存在对应实例则直接返回,如果ROOT-Logger.getChildByName找不到对应nameLogger,就创建一个Logger

这里可以看出创建的Logger实例的父Logger就是ROOT-Logger,但是在创建的时候并没有涉及到AppenderAttachableImpl的赋值.接下来再探索一下,AppenderAttachableImpl的赋值过程(基于SpringBoot)
直接定位到初始化类ch.qos.logback.classic.joran.action.LoggerAction

ch.qos.logback.core.joran.action.AppenderRefAction

在解析logback.xml在解析到元素的时候会创建相应Logger实例,并且如果有子元素,就给实例的AppenderAttachableImpl赋值

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68301.html

相关文章

  • 架构

    摘要:分布式架构实践负载均衡在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。就鹿晗宣布恋情导致微博宕机事件浅谈大型网站高可用性架构中午吃饭刷着刷着微博发现微博突然挂了。 分布式架构实践——负载均衡 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑...

    Pink 评论0 收藏0

发表评论

0条评论

FullStackDeveloper

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<