创意电子

标题: 从问题出发学习slf4j、logback源码系列-pattern内容解析 [打印本页]

作者: 清新明月CE    时间: 2021-10-3 16:28
标题: 从问题出发学习slf4j、logback源码系列-pattern内容解析
问题:logback.xml里面我们一样平常会配置日志的打印格式,比如%date [%thread] %-5level %X{tid} %logger{50}:%L - %msg%n,logback是如何解析和使用pattern的呢?
在logback初始化解析xml的过程中,会进入PatternLayoutBase.java的start方法

                               
登录/注册后可看大图

在Parser构造函数里会使用TokenStream将pattern解析为Token的集合

                               
登录/注册后可看大图

然后在Parser的parse方法会把tokenList构建成Node链表

                               
登录/注册后可看大图

然后进入PatternLayoutBase.java的start方法比较关键的一步this.head = p.compile(t, getEffectiveConverterMap());
getEffectiveConverterMap()方法在PatternLayoutBase的子类PatternLayout里,将各种符号和对应的Converter放在了一个map里

                               
登录/注册后可看大图

接着是在complie方法里面把Node链表和Converter的map构建成了Converter的链表

                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图

接着在postCompileProcessor.process(context, head),会把异常相关的Converter放到链表的尾节点,

                               
登录/注册后可看大图

到这里,根据pattern构造Converter链表就竣事了,后面拼接日志文本的内容就是根据Converter链表来举行的

                               
登录/注册后可看大图





欢迎光临 创意电子 (https://wxcydz.cc/) Powered by Discuz! X3.4