最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

logback高效狀態(tài)管理器StatusManager源碼解析

 更新時間:2023年11月07日 09:49:35   作者:codecraft  
這篇文章主要為大家介紹了logback高效狀態(tài)管理器StatusManager源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

本文主要研究一下logback的StatusManager

StatusManager

ch/qos/logback/core/status/StatusManager.java

public interface StatusManager {
    /**
     * Add a new status message.
     * 
     * @param status
     */
    void add(Status status);
    /**
     * Obtain a copy of the status list maintained by this StatusManager.
     * 
     * @return
     */
    List<Status> getCopyOfStatusList();
    /**
     * Return the highest level of all the statii.
     * 
     * @return
     */
    // int getLevel();
    /**
     * Return the number of status entries.
     * 
     * @return
     */
    int getCount();
    /**
     * Add a status listener.
     * 
     * @param listener
     */
    /**
     * Add a status listener. The StatusManager may decide to skip installation if
     * an earlier instance was already installed.
     * 
     * @param listener
     * @return true if actually added, false if skipped
     */
    boolean add(StatusListener listener);
    /**
     * ); Remove a status listener.
     * 
     * @param listener
     */
    void remove(StatusListener listener);
    /**
     * Clear the list of status messages.
     */
    void clear();
    /**
     * Obtain a copy of the status listener list maintained by this StatusManager
     * 
     * @return
     */
    List<StatusListener> getCopyOfStatusListenerList();
}
StatusManager接口針對status定義了add、getCopyOfStatusList、getCount、clear方法,針對StatusListener定義了add、remove、getCopyOfStatusListenerList方法

BasicStatusManager

ch/qos/logback/core/BasicStatusManager.java

public class BasicStatusManager implements StatusManager {
    final protected List<Status> statusList = new ArrayList<Status>();
    final protected CyclicBuffer<Status> tailBuffer = new CyclicBuffer<Status>(TAIL_SIZE);
    final protected LogbackLock statusListLock = new LogbackLock();
    final protected List<StatusListener> statusListenerList = new ArrayList<StatusListener>();
    final protected LogbackLock statusListenerListLock = new LogbackLock();
    //......
}
BasicStatusManager實現(xiàn)了StatusManager接口,它使用statusList及statusListLock來操作status,使用statusListenerList及statusListenerListLock來操作StatusListener;另外針對status還提供了tailBuffer

add status

public void add(Status newStatus) {
        // LBCORE-72: fire event before the count check
        fireStatusAddEvent(newStatus);
        count++;
        if (newStatus.getLevel() > level) {
            level = newStatus.getLevel();
        }
        synchronized (statusListLock) {
            if (statusList.size() < MAX_HEADER_COUNT) {
                statusList.add(newStatus);
            } else {
                tailBuffer.add(newStatus);
            }
        }
    }
add方法先加鎖,再判斷是否超出限制,沒有則添加到statusList,超出則添加到tailBuffer

getCopyOfStatusList

public List<Status> getCopyOfStatusList() {
        synchronized (statusListLock) {
            List<Status> tList = new ArrayList<Status>(statusList);
            tList.addAll(tailBuffer.asList());
            return tList;
        }
    }
getCopyOfStatusList則加鎖,然后從statusList及tailBuffer獲取status

clear

public void clear() {
        synchronized (statusListLock) {
            count = 0;
            statusList.clear();
            tailBuffer.clear();
        }
    }
clear則加鎖,重置count,清空statusList及tailBuffer

add listener

public boolean add(StatusListener listener) {
        synchronized (statusListenerListLock) {
            if (listener instanceof OnConsoleStatusListener) {
                boolean alreadyPresent = checkForPresence(statusListenerList, listener.getClass());
                if (alreadyPresent)
                    return false;
            }
            statusListenerList.add(listener);
        }
        return true;
    }
    private boolean checkForPresence(List<StatusListener> statusListenerList, Class<?> aClass) {
        for (StatusListener e : statusListenerList) {
            if (e.getClass() == aClass)
                return true;
        }
        return false;
    }
add listener方法先加鎖,然后判斷是否已經(jīng)存在,不存在則添加到statusListenerList

remove

public void remove(StatusListener listener) {
        synchronized (statusListenerListLock) {
            statusListenerList.remove(listener);
        }
    }
remove則先加鎖,然后從statusListenerList中移除

getCopyOfStatusListenerList

public List<StatusListener> getCopyOfStatusListenerList() {
        synchronized (statusListenerListLock) {
            return new ArrayList<StatusListener>(statusListenerList);
        }
    }
getCopyOfStatusListenerList則先加鎖然后拷貝statusListenerList

Status

ch/qos/logback/core/status/Status.java

public interface Status {
    int INFO = 0;
    int WARN = 1;
    int ERROR = 2;
    int getLevel();
    int getEffectiveLevel();
    Object getOrigin();
    String getMessage();
    Throwable getThrowable();
    /**
     * @eprecated. Use getTimestamp instead.
     * @return
     */
    @Deprecated
    default Long getDate() {
        return getTimestamp();
    }
    long getTimestamp();
    boolean hasChildren();
    void add(Status child);
    boolean remove(Status child);
    Iterator<Status> iterator();
}
Status接口定義了getLevel、getEffectiveLevel、getOrigin、getMessage、getThrowable、getTimestamp、hasChildren、add、remove、iterator方法

StatusBase

ch/qos/logback/core/status/StatusBase.java

abstract public class StatusBase implements Status {
    static private final List<Status> EMPTY_LIST = new ArrayList<Status>(0);
    int level;
    final String message;
    final Object origin;
    List<Status> childrenList;
    Throwable throwable;
    long timestamp;
    public synchronized void add(Status child) {
        if (child == null) {
            throw new NullPointerException("Null values are not valid Status.");
        }
        if (childrenList == null) {
            childrenList = new ArrayList<Status>();
        }
        childrenList.add(child);
    }
    public synchronized boolean hasChildren() {
        return ((childrenList != null) && (childrenList.size() > 0));
    }
    public synchronized Iterator<Status> iterator() {
        if (childrenList != null) {
            return childrenList.iterator();
        } else {
            return EMPTY_LIST.iterator();
        }
    }
    public synchronized boolean remove(Status statusToRemove) {
        if (childrenList == null) {
            return false;
        }
        // TODO also search in childrens' children
        return childrenList.remove(statusToRemove);
    }
    public synchronized int getEffectiveLevel() {
        int result = level;
        int effLevel;
        Iterator<Status> it = iterator();
        Status s;
        while (it.hasNext()) {
            s = (Status) it.next();
            effLevel = s.getEffectiveLevel();
            if (effLevel > result) {
                result = effLevel;
            }
        }
        return result;
    }
    //......
}
StatusBase聲明實現(xiàn)Status接口,它通過childrenList來存儲子status

InfoStatus

ch/qos/logback/core/status/InfoStatus.java

public class InfoStatus extends StatusBase {
    public InfoStatus(String msg, Object origin) {
        super(Status.INFO, msg, origin);
    }
    public InfoStatus(String msg, Object origin, Throwable t) {
        super(Status.INFO, msg, origin, t);
    }
}
InfoStatus繼承了StatusBase,它的level為Status.INFO

WarnStatus

ch/qos/logback/core/status/WarnStatus.java

public class WarnStatus extends StatusBase {
    public WarnStatus(String msg, Object origin) {
        super(Status.WARN, msg, origin);
    }
    public WarnStatus(String msg, Object origin, Throwable t) {
        super(Status.WARN, msg, origin, t);
    }
}
WarnStatus繼承了StatusBase,它的level為Status.WARN

ErrorStatus

ch/qos/logback/core/status/ErrorStatus.java

public class ErrorStatus extends StatusBase {
    public ErrorStatus(String msg, Object origin) {
        super(Status.ERROR, msg, origin);
    }
    public ErrorStatus(String msg, Object origin, Throwable t) {
        super(Status.ERROR, msg, origin, t);
    }
}
ErrorStatus繼承了StatusBase,它的level為Status.ERROR

小結(jié)

logback定義了StatusManager用于管理status及其listener,其add方法會回調(diào)listener,之后加鎖,再判斷是否超出限制,沒有則添加到statusList,超出則添加到tailBuffer;Status是個接口,它有一個抽象類為StatusBase,而InfoStatus、WarnStatus、ErrorStatus都繼承了StatusBase。

以上就是logback高效狀態(tài)管理器StatusManager源碼解析的詳細內(nèi)容,更多關(guān)于logback StatusManager狀態(tài)管理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • httpclient重定向之后獲取網(wǎng)址信息示例

    httpclient重定向之后獲取網(wǎng)址信息示例

    使用HttpClient進行127.0.0.1:8080地址的問題,然后該地址自動重定向127.0.0.1:8080/mobserver,如何獲取該地址呢?使用HttpContext,下面是示例
    2014-02-02
  • IDEA占用C盤太大如何清理

    IDEA占用C盤太大如何清理

    這篇文章主要介紹了IDEA占用C盤太大如何清理的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • spring配置文件中util:properties和context:property-placeholder用法

    spring配置文件中util:properties和context:property-placeholder用法

    這篇文章主要介紹了spring配置文件中util:properties和context:property-placeholder用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java實現(xiàn)讀取TXT和CSV文件內(nèi)容

    Java實現(xiàn)讀取TXT和CSV文件內(nèi)容

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)讀取TXT和CSV文件內(nèi)容的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • 基于springboot+jwt實現(xiàn)刷新token過程解析

    基于springboot+jwt實現(xiàn)刷新token過程解析

    這篇文章主要介紹了基于springboot+jwt實現(xiàn)刷新token過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    這篇文章主要為大家詳細介紹了java微信開發(fā)API第二步,微信獲取以及保存接口調(diào)用憑證,感興趣的小伙伴們可以參考一下
    2016-06-06
  • jar包中替換指定的class文件方法詳解

    jar包中替換指定的class文件方法詳解

    這篇文章主要為大家介紹了jar包中替換指定的class文件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 非常詳細的Java異常處理機制知識整理大全

    非常詳細的Java異常處理機制知識整理大全

    Java異常指在程序運行時可能出現(xiàn)的一些錯誤,比如試圖打開一個根本不存在的文件等,異常處理將會改變程序的控制流程,讓程序有機會對錯誤做出處理,下面這篇文章主要給大家介紹了關(guān)于Java異常處理機制知識整理的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • jboss配置方法簡明教程

    jboss配置方法簡明教程

    這篇文章主要介紹了jboss配置方法,較為簡明扼要的說明了jboss服務(wù)器所需要的JDK環(huán)境安裝設(shè)置以及jboss的安裝與下載,并分析了配置與使用中的常見問題,需要的朋友可以參考下
    2016-08-08
  • Java GUI制作簡單的管理系統(tǒng)

    Java GUI制作簡單的管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java GUI制作簡單的管理系統(tǒng)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

宜城市| 汪清县| 济源市| 泊头市| 永定县| 象州县| 渭源县| 三门峡市| 商洛市| 高密市| 保定市| 定兴县| 承德市| 潞西市| 聂荣县| 冷水江市| 临颍县| 黄浦区| 定西市| 桑植县| 睢宁县| 聂拉木县| 贡嘎县| 城口县| 正镶白旗| 墨玉县| 光泽县| 廊坊市| 应城市| 广河县| 五大连池市| 顺昌县| 阳山县| 寻甸| 内江市| 广德县| 鄯善县| 吕梁市| 分宜县| 行唐县| 富锦市|