logback原理解析appender-ref

1.对appender-ref 的认识。

2.线程同步的认识。

    2.1 logger.info从全局里匹配到对应的appender(单例)

    2.2 执行appender的doAppend

    2.3 由于是继承模式来扩展功能。方法会被覆载并且添加新的功能。{ 导致底层的类的功能的代码阅读特别难阅读,代码跳来跳去。例如RollingFileAppender,覆载了父类FileAppender的subAppend,增加了文件变更的功能。 而FileAppender },调用子类实现的

abstract protected void append(E eventObject);

   2.4 继续调用 某个子类的扩展 protected void subAppend(E event) {}

     如果是RollingFileAppender,又会被

 

1.看到AsynAppender里配置了appender-ref,有点好奇这个的功能。

   想探索原因。1. 对比了RollingFileAppender 和AsyncAppender整体父类结构,了解接口和类的概念。

2.貌似没有ref相关的字段。

    新的思路:全局搜索appender-ref ,想找到解析的入口。

最终找到:

JoranConfigurator.java

 

rs.addRule(new ElementSelector("configuration/logger/appender-ref"),
    new AppenderRefAction());
rs.addRule(new ElementSelector("configuration/root/appender-ref"),
 
rs.addRule(new ElementSelector("configuration/appender/appender-ref"),
new AppenderRefAction());
通过全局搜索找到对应的执行类。

说明只有异步的asyncAppenderBase才有依赖的appender。

通过

worker.start(); 一个线程+一个队列。来执行append
E e = parent.blockingQueue.take();
   aai.appendLoopOnAppenders(e); //即封装了真正appender的类。内部就是一个list封装。
aai

 

public class AppenderAttachableImpl<E> implements AppenderAttachable<E> {

final private CopyOnWriteArrayList<Appender<E>> appenderList = new CopyOnWriteArrayList<Appender<E>>();}

 

 

研究代码AsyncAppenderBase.java发现,该版本logback不支持neverBlock参数.当discardingThreshold配置为0的时候,一旦异步队列填满,会被阻塞. 1.1.2.jar是有问题的.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值