日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Log4j的isdebugEnabled的作用

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Log4j的isdebugEnabled的作用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在項(xiàng)目中我們經(jīng)常可以看到這樣的代碼:

?

if (logger.isDebugEnabled()) {

?? ?logger.debug(message);

}

?

?? ?有些人不明白為什么要這樣寫。有些人認(rèn)為這樣是為了能夠控制日志的輸出,對(duì)于下面這行代碼,

?

?

?logger.debug(message);

?

?

?? ?他們的看法是:如果這樣寫的話,就算你把日志級(jí)別調(diào)整為info, 這里也會(huì)輸出日志。

?

?? ?其實(shí),在debug()方法里面,就已經(jīng)叛斷了日志的級(jí)別。以下是isDebugEnabled()的源碼:

?

?

?

public boolean isDebugEnabled() { ? ?

??if(repository.isDisabled( Level.DEBUG_INT))

?? ? ?return false;

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

??}

?

?

?? ?以下是debug()的源碼:

?? ? ?public void debug(Object message) {

?? ?if(repository.isDisabled(Level.DEBUG_INT))

?? ? ?return;

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

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

?? ?}

??}

?

?

?? ? 我們可以看到,在debug()方法里做了跟isDebugEnabled()方法一樣的判斷。

?? ?在這里,我們不禁會(huì)想,那我們凡是要輸日志的地方,都不判斷isDebugEnabled,直接調(diào)debug方法,不更省事嗎?

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

?? ?我們來看下面一行代碼:

?? ? ? ?logger.debug("The money is " + getTotalMoney());

假設(shè)我們的日志級(jí)別設(shè)置為info,那這句話不會(huì)輸出日志,但這個(gè)方法還是會(huì)調(diào)用。要調(diào)用這個(gè)方法,必須提供參數(shù)。getTotalMoney()方法返回的結(jié)果就是參數(shù)的一部分。假設(shè)getTotalMoney()要執(zhí)行10秒鐘,10秒鐘后,進(jìn)入到debug()方法里,碰到了第一個(gè)判斷:

?

if(repository.isDisabled(Level.DEBUG_INT))

?? ? ?return;

?

?在這里就返回了。結(jié)果是日志雖然沒有輸出,卻花費(fèi)了10秒鐘來構(gòu)造參數(shù)。很顯然這里得不償失的。盡管實(shí)際應(yīng)用中幾乎不可能有這種花10秒鐘來構(gòu)造這樣一個(gè)參數(shù)的情況,但如果并發(fā)數(shù)大的話,這樣寫還是會(huì)影響系統(tǒng)的性能的。這個(gè)時(shí)候,就應(yīng)該寫成:

?

if(logger.isDebugEnabled()){

logger.debug("The money is " + getTotalMoney());

}?

?如果debug的參數(shù)很簡(jiǎn)單的話,也可以直接寫 logger.debug(message)的。官方的說法,執(zhí)行一次logger.isDebugEnabled()這樣的判斷花費(fèi)的時(shí)間大概是寫日志時(shí)間的萬分之一.雖然這個(gè)比例很小,

??但是,程序中的任何地方放到并發(fā)的環(huán)境下,我們就得重新考慮了。

??所以,我覺得,我們開發(fā)的時(shí)候, 應(yīng)該視具體的情況選擇不同的寫法。

??第一次在這里發(fā)文,雖然自己技術(shù)很菜,但丑媳婦總歸是要見家娘,技術(shù)應(yīng)是百花爭(zhēng)嗚,不應(yīng)一家獨(dú)大,否則全世界就只能是那幾個(gè)大拿寫技術(shù)文章了。在這寫寫自己心得,交流交流技術(shù), 引引玉,總歸是件有意義的事。


from:?http://zhukewen-java.iteye.com/blog/1174017

總結(jié)

以上是生活随笔為你收集整理的Log4j的isdebugEnabled的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。