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

logback的isDebugEnabled日志配置級(jí)別源碼解析

 更新時(shí)間:2023年11月12日 14:33:59   作者:codecraft  
這篇文章主要為大家介紹了logback的isDebugEnabled日志配置級(jí)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本文主要研究一下logback的isDebugEnabled

isDebugEnabled

public final class Logger
        implements org.slf4j.Logger, LocationAwareLogger, LoggingEventAware, AppenderAttachable<ILoggingEvent>, Serializable {
    //......
    public boolean isDebugEnabled() {
        return isDebugEnabled(null);
    }
    public boolean isDebugEnabled(Marker marker) {
        final FilterReply decision = callTurboFilters(marker, Level.DEBUG);
        if (decision == FilterReply.NEUTRAL) {
            return effectiveLevelInt <= Level.DEBUG_INT;
        } else if (decision == FilterReply.DENY) {
            return false;
        } else if (decision == FilterReply.ACCEPT) {
            return true;
        } else {
            throw new IllegalStateException("Unknown FilterReply value: " + decision);
        }
    }        
}
isDebugEnabled先通過(guò)callTurboFilters獲取debug級(jí)別的FilterReply,若為DENY返回false,若為ACCEPT返回true,若為NEUTRAL則判斷effectiveLevelInt是否小于等于DEBUG_INT

callTurboFilters

/**
     * Method that calls the attached TurboFilter objects based on the logger and
     * the level.
     * 
     * It is used by isYYYEnabled() methods.
     * 
     * It returns the typical FilterReply values: ACCEPT, NEUTRAL or DENY.
     * 
     * @param level
     * @return the reply given by the TurboFilters
     */
    private FilterReply callTurboFilters(Marker marker, Level level) {
        return loggerContext.getTurboFilterChainDecision_0_3OrMore(marker, this, level, null, null, null);
    }
callTurboFilters從loggerContext獲取getTurboFilterChainDecision_0_3OrMore

getTurboFilterChainDecision_0_3OrMore

ch/qos/logback/classic/LoggerContext.java

final FilterReply getTurboFilterChainDecision_0_3OrMore(final Marker marker, final Logger logger, final Level level,
            final String format, final Object[] params, final Throwable t) {
        if (turboFilterList.size() == 0) {
            return FilterReply.NEUTRAL;
        }
        return turboFilterList.getTurboFilterChainDecision(marker, logger, level, format, params, t);
    }
該方法先判斷turboFilterList是否為空,為空則返回NEUTRAL,否則執(zhí)行turboFilterList.getTurboFilterChainDecision

getTurboFilterChainDecision

ch/qos/logback/classic/spi/TurboFilterList.java

public FilterReply getTurboFilterChainDecision(final Marker marker, final Logger logger, final Level level,
            final String format, final Object[] params, final Throwable t) {
        final int size = size();
        // if (size == 0) {
        // return FilterReply.NEUTRAL;
        // }
        if (size == 1) {
            try {
                TurboFilter tf = get(0);
                return tf.decide(marker, logger, level, format, params, t);
            } catch (IndexOutOfBoundsException iobe) {
                return FilterReply.NEUTRAL;
            }
        }
        Object[] tfa = toArray();
        final int len = tfa.length;
        for (int i = 0; i < len; i++) {
            // for (TurboFilter tf : this) {
            final TurboFilter tf = (TurboFilter) tfa[i];
            final FilterReply r = tf.decide(marker, logger, level, format, params, t);
            if (r == FilterReply.DENY || r == FilterReply.ACCEPT) {
                return r;
            }
        }
        return FilterReply.NEUTRAL;
    }
getTurboFilterChainDecision在只有1個(gè)TurboFilter的時(shí)候執(zhí)行decide方法,否則遍歷TurboFilter,挨個(gè)執(zhí)行decide,一但有DENY或者ACCEPT直接返回,否則最后返回NEUTRAL

小結(jié)

logback的isDebugEnabled先通過(guò)callTurboFilters獲取debug級(jí)別的FilterReply,若為DENY返回false,若為ACCEPT返回true,若為NEUTRAL則判斷effectiveLevelInt是否小于等于DEBUG_INT。callTurboFilters是一系列isYYYEnabled()共用的,它在turboFilterList是否為空,為空則返回NEUTRAL,在只有1個(gè)TurboFilter的時(shí)候執(zhí)行decide方法,否則遍歷TurboFilter,挨個(gè)執(zhí)行decide,一但有DENY或者ACCEPT直接返回,否則最后返回NEUTRAL。

以上就是logback的isDebugEnabled日志配置級(jí)別源碼解析的詳細(xì)內(nèi)容,更多關(guān)于logback isDebugEnabled的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java深入講解static操作符

    Java深入講解static操作符

    static關(guān)鍵字基本概念我們可以一句話(huà)來(lái)概括:方便在沒(méi)有創(chuàng)建對(duì)象的情況下來(lái)進(jìn)行調(diào)用。也就是說(shuō):被static關(guān)鍵字修飾的不需要?jiǎng)?chuàng)建對(duì)象去調(diào)用,直接根據(jù)類(lèi)名就可以去訪(fǎng)問(wèn),讓我們來(lái)了解一下你可能還不知道情況
    2022-07-07
  • Java 字符串連接的性能問(wèn)題分析

    Java 字符串連接的性能問(wèn)題分析

    這篇文章主要介紹了Java 字符串連接的性能問(wèn)題分析的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java多線(xiàn)程中線(xiàn)程池常見(jiàn)7個(gè)參數(shù)的詳解以及執(zhí)行流程

    Java多線(xiàn)程中線(xiàn)程池常見(jiàn)7個(gè)參數(shù)的詳解以及執(zhí)行流程

    本文主要介紹了Java多線(xiàn)程中線(xiàn)程池常見(jiàn)7個(gè)參數(shù)的詳解以及執(zhí)行流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java HashMap兩種簡(jiǎn)便排序方法解析

    Java HashMap兩種簡(jiǎn)便排序方法解析

    這篇文章主要介紹了Java HashMap兩種簡(jiǎn)便排序方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)

    SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)

    這篇文章主要介紹了SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Json字符串與Object、List、Map的互轉(zhuǎn)工具類(lèi)

    Json字符串與Object、List、Map的互轉(zhuǎn)工具類(lèi)

    今天小編就為大家分享一篇關(guān)于Json字符串與Object、List、Map的互轉(zhuǎn)工具類(lèi),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 新手初學(xué)Java對(duì)象內(nèi)存構(gòu)成

    新手初學(xué)Java對(duì)象內(nèi)存構(gòu)成

    這篇文章主要介紹了深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪(fǎng)問(wèn)定位,結(jié)合實(shí)例形式詳細(xì)分析了Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪(fǎng)問(wèn)定位相關(guān)概念、原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2021-07-07
  • SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    在現(xiàn)代應(yīng)用開(kāi)發(fā)中經(jīng)常會(huì)使用JSON格式存儲(chǔ)和傳輸數(shù)據(jù),為了便捷地處理數(shù)據(jù)庫(kù)中的JSON字段,MyBatis-Plus提供了強(qiáng)大的JSON處理器,這篇文章主要給大家介紹了關(guān)于SpringBoot?mybatis-plus使用json字段的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • MyBatis的配置對(duì)象Configuration作用及說(shuō)明

    MyBatis的配置對(duì)象Configuration作用及說(shuō)明

    MyBatis的Configuration對(duì)象是MyBatis的核心配置對(duì)象,它包含了MyBatis運(yùn)行時(shí)所需的幾乎所有配置信息,這個(gè)對(duì)象負(fù)責(zé)管理MappedStatement、創(chuàng)建核心組件、提供配置信息的訪(fǎng)問(wèn)接口以及作為插件機(jī)制的入口
    2025-03-03
  • 在Mac OS上安裝Tomcat服務(wù)器的教程

    在Mac OS上安裝Tomcat服務(wù)器的教程

    這篇文章主要介紹了在Mac OS上安裝Tomcat服務(wù)器的教程,方便進(jìn)行工作環(huán)境下的Java web開(kāi)發(fā),需要的朋友可以參考下
    2015-11-11

最新評(píng)論

汽车| 霍山县| 乌兰县| 舞阳县| 区。| 大同县| 齐齐哈尔市| 德州市| 馆陶县| 景东| 永城市| 布拖县| 大竹县| 百色市| 玛多县| 安义县| 方正县| 桑日县| 诸暨市| 三台县| 朝阳市| 西乡县| 白河县| 越西县| 甘孜县| 安泽县| 富民县| 德惠市| 仙桃市| 南康市| 益阳市| 师宗县| 石柱| 八宿县| 当雄县| 曲麻莱县| 阿鲁科尔沁旗| 樟树市| 嘉祥县| 辰溪县| 遵义市|