logback原理解析appender-ref

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fei33423/article/details/79878264

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>>();}

展开阅读全文

没有更多推荐了,返回首页