打印日志前真的要判斷級別么

我們經(jīng)晨岳看到各種代碼規(guī)約都要求我們在打印日志前先做一次日志級別判斷墨辛,例如

對于trace/debug/info級別的日志輸出英融,必須進(jìn)行日志級別的開關(guān)判斷铃彰。

這樣做的好處主要是為了性能優(yōu)化绍豁,雖然一般打印日志的方法里面都會判斷日志級別,但是在調(diào)用時可能會有一些字符串的拼接或者方法的調(diào)用牙捉,這樣就造成了一些不必要的開銷竹揍。

if (logger.isDebugEnabled()) {

? ? logger.debug("orderId is {}", getOrderId());? //避免多余的方法調(diào)用,尤其是復(fù)雜的計(jì)算

}

另外一個點(diǎn)日志打印時一般推薦的是使用占位符而不是直接的字符串拼裝鹃共,原因也是同理,因?yàn)槭褂谜嘉环姆绞娇梢詫⒆址钠囱b延遲到真正需要的時候做驶拱,避免用戶沒有進(jìn)行日志級別判斷導(dǎo)致日志內(nèi)容組裝帶來的開銷霜浴。不過使用占位符在性能上要比直接進(jìn)行字符串拼裝要稍微差一點(diǎn)點(diǎn)(因?yàn)闀幸恍└袷浇馕龅龋以诜椒ㄕ{(diào)用是會需要多余的Object[]來傳遞參數(shù)蓝纲,因此阴孟,一般日志框架會提供兩個重載的方法來替代直接使用可變參數(shù)的形式晌纫。

? ? public void trace(String format, Object arg);

public void trace(String format, Object arg1, Object arg2);? //避免創(chuàng)建Object[]來存儲參數(shù)

結(jié)合上面兩點(diǎn),無論是提前判斷級別還是使用占位符都是期望將參數(shù)的拼裝延遲到真正需要需要的時候在執(zhí)行永丝,兩者好像只需要其中一種就可以了锹漱。

如果讓我選擇,我會選擇使用占位符的方式慕嚷,畢竟在每一個打印日志的地方都加上日志級別判斷是一件非常麻煩的事情哥牍,而且代碼看起來也比較丑陋。如果要打印的日志不存在方法的調(diào)用喝检,只是單獨(dú)的字符串拼裝的話嗅辣,完全可以使用占位符,去掉煩人的級別判斷挠说。

那如果在拼裝日志時澡谭,需要復(fù)雜的計(jì)算怎么辦呢,難道只有日志級別判斷的方法么损俭?

與占位符類似蛙奖,我們可以使用一個對象將日志計(jì)算封裝起來,然后判斷日志級別后再調(diào)用對象的計(jì)算邏輯生成真正的日志字符串杆兵,不過這種方式會生成多余的一個對象雁仲。

public class LogWrapper? {
? ? ? private Logger logger;
? ? ? public void info(LogBuilder builder) {
? ? ? ? ? ? if (logger.isLoggable(Level.INFO)) {
? ? ? ? ? ? ? ? ? ? logger.info(builder.build());
? ? ? ? ? ? }
? ? ? ? }

? ? ? static interface LogBuilder {
? ? ? ? ? String build();
? ? ? }
}

為了避免每次打印日志的時候都使用new的方式來生成對象,我們可以使用lambda的方式(不過lambda并非只是簡單的語法糖拧咳,本身調(diào)用就存在一些開銷)

log.info(() -> "orderId is " + getOrderId());

這樣既可以達(dá)到延遲執(zhí)行日志計(jì)算伯顶,也可以去掉日志級別的判斷,不過如果只是簡單的字符串拼裝骆膝,還是使用占位符更經(jīng)濟(jì)祭衩,因此在wrapper中加上占位符的方法,這樣直接使用wrapper就可以了阅签。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掐暮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子政钟,更是在濱河造成了極大的恐慌路克,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养交,死亡現(xiàn)場離奇詭異精算,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碎连,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門灰羽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事廉嚼∶蹈洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵怠噪,是天一觀的道長恐似。 經(jīng)常有香客問我,道長傍念,這世上最難降的妖魔是什么矫夷? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮捂寿,結(jié)果婚禮上口四,老公的妹妹穿的比我還像新娘。我一直安慰自己秦陋,他們只是感情好蔓彩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驳概,像睡著了一般赤嚼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顺又,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天更卒,我揣著相機(jī)與錄音,去河邊找鬼稚照。 笑死蹂空,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的果录。 我是一名探鬼主播上枕,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弱恒!你這毒婦竟也來了辨萍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤返弹,失蹤者是張志新(化名)和其女友劉穎锈玉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體义起,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拉背,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了默终。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椅棺。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抡诞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土陪,到底是詐尸還是另有隱情,我是刑警寧澤肴熏,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布鬼雀,位于F島的核電站,受9級特大地震影響蛙吏,放射性物質(zhì)發(fā)生泄漏源哩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一鸦做、第九天 我趴在偏房一處隱蔽的房頂上張望励烦。 院中可真熱鬧,春花似錦泼诱、人聲如沸坛掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屉栓。三九已至,卻和暖如春耸袜,著一層夾襖步出監(jiān)牢的瞬間友多,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工堤框, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留域滥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓蜈抓,卻偏偏與公主長得像启绰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子资昧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況酬土,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時待吾閱讀 5,049評論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時待吾閱讀 4,988評論 0 6
  • 一格带、編程規(guī)約 (一)命名規(guī)約 【強(qiáng)制】 代碼中的命名均不能以下劃線或美元符號開始撤缴,也不能以下劃線或美元符號結(jié)束。反...
    喝咖啡的螞蟻閱讀 1,511評論 0 2
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時叽唱,會觸發(fā)此異常屈呕。 O...
    我想起個好名字閱讀 5,317評論 0 9
  • 今天店里來了一個怪人,胖胖的棺亭,和前輩好像是熟識虎眨,聽他們的談話,好像是電梯維修工。這個人在這里從我早上上班到第二天下...
    拿刀的儒士閱讀 176評論 0 0