java - 為什么Log記錄日志要先做一個(gè)判斷
問(wèn)題描述
為什么Log記錄日志要先做一個(gè)判斷了?如下。
if (logger.isErrorEnabled()){logger.error(msg,e); } 還有就是logger.isDebugEnabled和logger.isInfoEnable 等等?
問(wèn)題解答
回答1:換下面這個(gè)例子就明白了。
if (log.isDebugEnabled()) { log.debug('log ' + param1 + ' ...');}
在記錄日志時(shí)很多情況下都會(huì)記錄一些參數(shù)信息,在使用jcl做為日志接口時(shí)難免少不了要拼接字符串,但是日志有不同的級(jí)別(level)在線上運(yùn)行時(shí)正常情況是不會(huì)將所有日志級(jí)別的日志都記錄下來(lái)。
在使用jcl時(shí)如果不增加日志級(jí)別判斷。直接這樣使用log.debug('log ' + param1 + ' ...');會(huì)產(chǎn)生很多不需要的String對(duì)象,這些String實(shí)際沒(méi)有產(chǎn)生作用,浪費(fèi)了執(zhí)行時(shí)間,同時(shí)gc也需要大量回收這種垃圾對(duì)象,這也就是在使用jcl時(shí)需要增加判斷的原因。
當(dāng)然我們現(xiàn)在可以直接使用slf4j利用占位符來(lái)減少這種if判斷。如log.debug('log {} ...', param1)slf4j
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題2. javascript - QWebEngineView 如何爬 angular 的動(dòng)態(tài)數(shù)據(jù)?3. javascript - 使用angular 的ui-sref 中出現(xiàn)了中文參數(shù),點(diǎn)擊跳轉(zhuǎn)后瀏覽器的地址欄里出現(xiàn)轉(zhuǎn)義后的%AE....%a%44. java - ConcurrentHashMap中的get()方法為什么可以不加鎖?5. java - 郵箱如何發(fā)送html內(nèi)容6. html5 - 這個(gè)代碼顯示功能如何實(shí)現(xiàn)?7. javascript - 用JS 七牛上傳圖片出現(xiàn)文件已存在的錯(cuò)誤(file exists)8. 工作近5年,3年Java Web ,近2年前端,未來(lái)何去何從?9. css3 - 圖片等比例縮放10. java - 字節(jié)流轉(zhuǎn)成字符串之后,在通過(guò)字符串轉(zhuǎn)成字節(jié)流后的文件為什么會(huì)不一樣?
