全站最硬核 百万字强肝RocketMq源码 火热更新中~(二)


为防止被序列化,加了transient关键字,内部定义了六种日志级别:

final static public Level OFF = new Level(OFF_INT, OFF_NAME, 0);

final static public Level ERROR = new Level(ERROR_INT, ERROR_NAME, 3);

final static public Level WARN = new Level(WARN_INT, WARN_NAME, 4);

final static public Level INFO = new Level(INFO_INT, INFO_NAME, 6);

final static public Level DEBUG = new Level(DEBUG_INT, DEBUG_NAME, 7);

final static public Level ALL = new Level(ALL_INT, ALL_NAME, 7);

值得注意的是这个toLevel方法:

public static Level toLevel(String sArg, Level defaultLevel) {
    if (sArg == null) {
        return defaultLevel;
    }
    String s = sArg.toUpperCase();

    if (s.equals(ALL_NAME)) {
        return Level.ALL;
    }
    if (s.equals(DEBUG_NAME)) {
        return Level.DEBUG;
    }
    if (s.equals(INFO_NAME)) {
        return Level.INFO;
    }
    if (s.equals(WARN_NAME)) {
        return Level.WARN;
    }
    if (s.equals(ERROR_NAME)) {
        return Level.ERROR;
    }
    if (s.equals(OFF_NAME)) {
        return Level.OFF;
    }
    if (s.equals(INFO_NAME)) {
        return Level.INFO;
    }
    return defaultLevel;
}

String s = sArg.toUpperCase(); 这个就很用户友好了,也就是说获取日志级别,用户输入大小写都是兼容的。

此时我们再次回到DefaultLoggerRepository,此时我们就明白了,DefaultLoggerRepository其实就是Logger内部用来做缓存的内部类,底层由Hashtable实现,并对Hashtable使用synchronized关键字做了并发处理。

回到Logger,继续往下走,又看到

Appender.AppenderPipelineImpl appenderPipeline;

org.apache.rocketmq.logging.inner.Appender.AppenderPipelineImpl

从翻译看,这个叫追加器管道,是AppenderPipeline的实现类,下面是这个接口的定义:

public interface AppenderPipeline {

    void addAppender(Appender newAppender);

    Enumeration getAllAppenders();

    Appender getAppender(String name);

    boolean isAttached(Appender appender);

    void removeAllAppenders();

    void removeAppender(Appender appender);

    void removeAppender(String name);
}

进入实现类AppenderPipelineImpl可以看到,其实这个管道,就是一个元素类型为Appender的Vector集合

public static class AppenderPipelineImpl implements AppenderPipeline {


    protected Vector<Appender> appenderList;

附:Vector,与ArrayList、LinkedList相比,特点在于线程安全。多线程环境推荐使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值