Log4j中為什么設(shè)計isDebugEnabled()方法

先看下面的代碼,在真正執(zhí)行logger.debug()之前,進行了logger.isDebugEnabled()的判斷,既然log4j.properties已經(jīng)配置了log level為debug, 為什么還需要這個判斷?

if (logger.isDebugEnabled()) {
    logger.debug("Entry number: " + i + " is " + entry[i].toString());
}

加上這個logger.isDebugEnabled() 后,如果值為false,if里面的代碼就不會執(zhí)行,就節(jié)省了字符串的拼接,少生成幾個對象,如果不加,總會先拼接里面的字符串(連接字符串最好也不用+)

如果不用logger.isDebugEnabled(), 請使用log4j的其他重載的方法, 比如下面的

ogger.debug("Entry number: {} is {}", i, entry[i]);

這個代碼實際上會先判斷debug是否是enabled, 只有enabled才會format里面的字符串,下面就是log4j的源碼:

 @Override
    public void debug(final String message, final Supplier<?>... paramSuppliers) {
        logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers);
    }

    @Override
    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
            final Throwable t) {
        if (isEnabled(level, marker, msg, t)) {
            logMessageSafely(fqcn, level, marker, msg, t);
        }
    }

    @Override
    public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) {
        return privateConfig.filter(level, marker, message, t);
    }

一句話總結(jié)一下:logger.isDebugEnabled()為了提高某些情況下的性能才設(shè)計的。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 5,203評論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進行統(tǒng)計分析...
    時待吾閱讀 5,146評論 0 6
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan閱讀 3,399評論 0 0
  • 一、Log4j簡介 Log4j有三個主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護閱讀 1,976評論 2 8
  • log4j 1.1 簡介 Log4j是一個由Java編寫可靠、靈活的日志框架,是Apache旗下的一個開源項目;現(xiàn)...
    賈博巖閱讀 8,067評論 1 32

友情鏈接更多精彩內(nèi)容