logger.isDebugEnabled()作用

來源:互聯網
上載者:User

標籤:輸出   effect   為什麼   this   複雜   bsp   eve   isa   int   

項目中經常會用到:
if (logger.isDebugEnabled()) {
    logger.debug( "message:" + user.getMessage() );
}
我們會想當然得認為這段代碼作用是為了控制記錄檔的輸出,但是通過查看源碼我們會發現,在debug()方法中做了與isDebugEnabled()方法一樣的判斷,因此我們在需要輸出日誌的地方直接調用debug方法也可以達到控制輸出的目的。
以下是isDebugEnabled()以及debug()方法的源碼:

public boolean isDebugEnabled() {    

  if(repository.isDisabled( Level.DEBUG_INT))

    return false;

  return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());

}

public void debug(Object message) {

  if(repository.isDisabled(Level.DEBUG_INT))

    return;

  if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {

    forcedLog(FQCN, Level.DEBUG, message, null);

  }

}

那麼我們為什麼還要多此一舉,加上這樣一個判斷語句呢?

官方的說法是:出於效率考慮,看具體情況而定。

首先我們看以下代碼:

log.debug( "message:" + user.getMessage() );
假如我們的記錄層級為info,那麼這句話不會被輸出,但是這樣寫,這個方法還是會調用,因此getMessage()方法還是會執行。如果getMessage()這個方法過於複雜,需要很長時間來執行。而參數構造完之後,我們進入debug()方法進行判斷:
    if(repository.isDisabled(Level.DEBUG_INT))
        return;
在這裡就返回了。這樣會導致我們什麼都沒有做但卻耗費了時間,如果並發量大的時候,對效能的影響就比較明顯了。
    這個時候,出於效能的考慮,我們就應當添加isDebugEnabled()判斷
    if (logger.isDebugEnabled()) {

        logger.debug( "message:" + user.getMessage() );

    }
但是如果是這樣簡單的輸出:
    logger.debug(“error”);
添加判斷就沒有必要了。

logger.isDebugEnabled()作用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.