Log4J学习【二十五】常用的Appender的使用二

接下来,Log4J提供了一个AppenderSkeleton类来作为最基本的Appender的实现。在这个类里面简单的对Filter和ErrorHandler等做了一些流程性的处理,废话不多说,先来看看代码:
public abstract class AppenderSkeleton implements Appender, OptionHandler
    首先这是个抽象的类,实现了Appender和OptionHandler接口,然后在这个抽象类里面定义了基础的Appender接口中的一些方法,比如怎么添加Filter,怎么添加ErrorHandler,怎么设置名字等,这些代码就忽略,接着看最重要的doAppend()方法:
public synchronized void doAppend(LoggingEvent event) {
    if (closed) {
        LogLog.error("Attempted to append to closed appender named [" + name + "].");
        return;
    }
    if (!isAsSevereAsThreshold(event.getLevel())) {
        return;
    }
    Filter f = this.headFilter;
    FILTER_LOOP: while (f != null) {
        switch (f.decide(event)) {
            case Filter.DENY:
            return;
            case Filter.ACCEPT:
            break FILTER_LOOP;
            case Filter.NEUTRAL:
            f = f.getNext();
        }
    }
    this.append(event);
}

    来看看代码流程
    1,首先方法是synchronized,所以是线程安全的;
    2,判断appender是否已经被关闭了,如果已经关闭,则退出;
    3,接着判断当前日志的级别是否低于Appender设置的日志级别,如果是,则退出。通过这代码,我们马上就可以了解到一个新的细节,在Appender上也可以设置每一个Appender自己的日志门槛。这个配置点,在之前的讲解中都没有介绍,但是通过看代码,马上就能了解。这个就是一个最典型的学习过程。我们总是先通过文档或者相关资料了解框架或者工具的大致用法,然后通过查看源代码来掌握更细节的操作。
    4,紧接着,如果当前Appender上有Filter,注意一个细节,Filter f = this.headFilter;和f = f.getNext();这两句代码,我们很容易的就可以猜想到,我们可以为Appender添加很多的Filter,而这些Filter又按照添加的关系构成了一个Filter链,在doAppend的过程当中,会按照Filter的处理结果选择退出,跳出,还是继续过滤。
    5,最后,调用append方法,真正执行具体的日志输出。而这个append方法:
     abstract protected void append(LoggingEvent event);
    就是真正子类需要去实现的了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值