第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在log4j中,在記錄之前檢查isDebugEnabled是否可以提高性能?

在log4j中,在記錄之前檢查isDebugEnabled是否可以提高性能?

慕勒3428872 2019-12-10 09:58:56
我在應(yīng)用程序中使用Log4J進(jìn)行日志記錄。以前我使用像下面這樣的調(diào)試調(diào)用:選項(xiàng)1:logger.debug("some debug text");但有些鏈接建議最好先檢查一下isDebugEnabled(),例如:選項(xiàng)2:boolean debugEnabled = logger.isDebugEnabled();if (debugEnabled) {    logger.debug("some debug text");}所以我的問題是“ 選項(xiàng)2是否會(huì)以任何方式提高性能? ”。因?yàn)樵谌魏吻闆r下,Log4J框架都對(duì)debugEnabled進(jìn)行相同的檢查。對(duì)于選項(xiàng)2,如果我們?cè)趩蝹€(gè)方法或類中使用多個(gè)調(diào)試語句,則框架可能不需要isDebugEnabled()(在每次調(diào)用中)多次調(diào)用方法,這可能是有益的。在這種情況下,它isDebugEnabled()僅調(diào)用一次方法,并且如果Log4J配置為調(diào)試級(jí)別,則實(shí)際上它isDebugEnabled()兩次調(diào)用方法:如果將值分配給debugEnabled變量,則實(shí)際是由logger.debug()方法調(diào)用的。我不認(rèn)為如果我們logger.debug()在方法或類中編寫多個(gè)語句,debug()然后根據(jù)選項(xiàng)1 調(diào)用方法,那么與選項(xiàng)2相比,它對(duì)Log4J框架來說是開銷。因?yàn)檫@isDebugEnabled()是一個(gè)非常小的方法(就代碼而言),因此成為內(nèi)聯(lián)的好人選。
查看完整描述

3 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

在這種情況下,選項(xiàng)1更好。


isDebugEnabled()當(dāng)它涉及調(diào)用toString()各種對(duì)象的方法并連接結(jié)果時(shí),可以使用保護(hù)語句(檢查)來防止對(duì)日志消息進(jìn)行潛在的昂貴計(jì)算。


在給定的示例中,日志消息是一個(gè)常量字符串,因此讓記錄器丟棄它與檢查是否啟用記錄器一樣有效,并且由于分支較少,因此降低了代碼的復(fù)雜性。


更好的方法是使用最新的日志記錄框架,在該框架中,日志語句采用格式規(guī)范和由記錄器替換的參數(shù)列表,但只有在啟用記錄器后才“懶惰”。這是slf4j采取的方法。


有關(guān)更多信息,請(qǐng)參見我對(duì)相關(guān)問題的答案,以及使用log4j進(jìn)行此類操作的示例。


查看完整回答
反對(duì) 回復(fù) 2019-12-10
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

由于在選項(xiàng)1中消息字符串是一個(gè)常量,因此用條件包裝換行記錄語句絕對(duì)沒有收益,相反,如果啟用了調(diào)試語句,則將進(jìn)行兩次評(píng)估,一次在isDebugEnabled()方法中,一次在系統(tǒng)中。debug()方法。調(diào)用的成本isDebugEnabled()約為5到30納秒,對(duì)于大多數(shù)實(shí)際目的而言應(yīng)該可以忽略不計(jì)。因此,選項(xiàng)2是不理想的,因?yàn)樗鼤?huì)污染您的代碼,并且不會(huì)帶來其他收益。


查看完整回答
反對(duì) 回復(fù) 2019-12-10
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊

isDebugEnabled()通過串聯(lián)字符串來構(gòu)建日志消息時(shí),保留使用:


Var myVar = new MyVar();

log.debug("My var is " + myVar + ", value:" + myVar.someCall());

但是,在您的示例中,您僅記錄一個(gè)String而不執(zhí)行諸如串聯(lián)之類的操作就不會(huì)提高速度。因此,您只是在代碼中添加了膨脹,使其難以閱讀。


我親自在String類中使用Java 1.5格式調(diào)用,如下所示:


Var myVar = new MyVar();

log.debug(String.format("My var is '%s', value: '%s'", myVar, myVar.someCall()));

我懷疑是否有很多優(yōu)化,但是更容易閱讀。


請(qǐng)注意,盡管大多數(shù)日志記錄API都提供了開箱即用的格式:例如slf4j提供了以下內(nèi)容:


logger.debug("My var is {}", myVar);

甚至更容易閱讀。


查看完整回答
反對(duì) 回復(fù) 2019-12-10
  • 3 回答
  • 0 關(guān)注
  • 452 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)