| 问题: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链表来举行的
 
 |