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