silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/jib/io/horizon/uca/log/Annal.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.horizon.uca.log;

import io.horizon.annotations.Memory;
import io.horizon.specification.uca.HLogger;
import io.horizon.uca.cache.Cc;
import io.horizon.uca.log.internal.BridgeAnnal;

/**
 * Unite Logging system connect to vert.x, io.vertx.zero.io.vertx.zero.io.vertx.up.io.vertx.up.io.vertx.up.util kit of Vertx-Zero
 */
public interface Annal extends HLogger {

    static Annal get(final Class<?> clazz) {
        /*
         * 旧代码:
         * final Class<?> cacheKey = Objects.isNull(clazz) ? Log4JAnnal.class : clazz;
         * return CACHE.CC_ANNAL_EXTENSION.pick(() -> new BridgeAnnal(clazz), cacheKey);
         * 此处会引起  java.lang.IllegalStateException: Recursive update 的问题
         * 假设底层已提供实现 Logger logger = LoggerFactory.getLogger,所以就不考虑线程安全
         * 问题,现阶段获取日志器会引起很大的线程安全问题,此处不能如此执行,特别针对全局模式下的操作尤其需要小心
         */
        return new BridgeAnnal(clazz);
    }
}

interface CACHE {
    /**
     * 按类分配的日志缓存池
     * 内部使用的按 hasCode 分配的日志缓存池
     * 旧代码:
     * <pre><code>
     * @Memory(Annal.class)
     * Cc<Class < ?>, Annal> CC_ANNAL_EXTENSION = Cc.open();
     * </code></pre>
     */
    @Memory(Annal.class)
    Cc<Integer, Annal> CC_ANNAL_INTERNAL = Cc.open();
}