java - 為什么Log記錄日志要先做一個(gè)判斷
問題描述
為什么Log記錄日志要先做一個(gè)判斷了?如下。
if (logger.isErrorEnabled()){logger.error(msg,e); } 還有就是logger.isDebugEnabled和logger.isInfoEnable 等等?
問題解答
回答1:換下面這個(gè)例子就明白了。
if (log.isDebugEnabled()) { log.debug('log ' + param1 + ' ...');}
在記錄日志時(shí)很多情況下都會(huì)記錄一些參數(shù)信息,在使用jcl做為日志接口時(shí)難免少不了要拼接字符串,但是日志有不同的級(jí)別(level)在線上運(yùn)行時(shí)正常情況是不會(huì)將所有日志級(jí)別的日志都記錄下來。
在使用jcl時(shí)如果不增加日志級(jí)別判斷。直接這樣使用log.debug('log ' + param1 + ' ...');會(huì)產(chǎn)生很多不需要的String對(duì)象,這些String實(shí)際沒有產(chǎn)生作用,浪費(fèi)了執(zhí)行時(shí)間,同時(shí)gc也需要大量回收這種垃圾對(duì)象,這也就是在使用jcl時(shí)需要增加判斷的原因。
當(dāng)然我們現(xiàn)在可以直接使用slf4j利用占位符來減少這種if判斷。如log.debug('log {} ...', param1)slf4j
相關(guān)文章:
1. javascript - npm下載的模塊不完整是什么問題?2. 從事游戲服務(wù)端開發(fā)(Java),需要具備哪些技術(shù)???3. java - Spring事務(wù)回滾問題4. python 操作mysql如何經(jīng)量防止自己的程序在之后被惡意注入(說白了就是問一下python防注入的一些要點(diǎn))5. 正兒八經(jīng)地請(qǐng)教天蓬老師6. 求一個(gè)mySQL安裝包7. 不能插入數(shù)據(jù)。8. mysql - 面試題:如何把login_log表轉(zhuǎn)換成last_login表?9. 剛放到服務(wù)器的項(xiàng)目出現(xiàn)這中錯(cuò)誤,有高手指點(diǎn)嗎10. mysql 插入數(shù)值到特定的列一直失敗
