日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
十個(gè)Java編程中記錄日志的小技巧

在Java編程中,良好的日志記錄是一項(xiàng)重要的實(shí)踐。無(wú)論是在調(diào)試代碼還是在生產(chǎn)環(huán)境中追蹤問(wèn)題,準(zhǔn)確的日志信息能夠提供有價(jià)值的上下文和跟蹤數(shù)據(jù)。然而,對(duì)于許多開(kāi)發(fā)者來(lái)說(shuō),正確地記錄日志可能是個(gè)挑戰(zhàn)。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括下陸網(wǎng)站建設(shè)、下陸網(wǎng)站制作、下陸網(wǎng)頁(yè)制作以及下陸網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,下陸網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到下陸省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

本文介紹一些簡(jiǎn)單且實(shí)用的技巧,以幫助讀者在Java編程中改善日志記錄,使其更加高效和易于調(diào)試。

1 選擇適當(dāng)?shù)娜罩靖袷?/h2>

理想的日志格式應(yīng)包含最基本的信息,例如當(dāng)前時(shí)間戳(通常精確到毫秒)、日志級(jí)別、線程名稱(chēng)等??梢韵裣旅孢@樣配置logback日志:


    
       %d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}] %m%n
    

如果開(kāi)發(fā)者的日志格式不記錄當(dāng)前時(shí)間,那么甚至無(wú)法知道請(qǐng)求發(fā)生的時(shí)間。

2 選擇適當(dāng)?shù)娜罩炯?jí)別

常見(jiàn)的日志級(jí)別有五個(gè),分別是error、warn、info、debug和trace。在日常開(kāi)發(fā)中,開(kāi)發(fā)者需要選擇適當(dāng)?shù)娜罩炯?jí)別,不要直接打印info級(jí)別的日志。

  • Error(錯(cuò)誤):指相對(duì)嚴(yán)重的錯(cuò)誤,會(huì)影響正常業(yè)務(wù),并需要進(jìn)行運(yùn)維配置監(jiān)控。
  • Warn(警告):一般的錯(cuò)誤,對(duì)業(yè)務(wù)影響較小,但需要開(kāi)發(fā)人員的注意。
  • Info(信息):記錄關(guān)鍵的故障排查信息,例如調(diào)用時(shí)間、輸入輸出參數(shù)等。
  • Debug(調(diào)試):用于開(kāi)發(fā)階段的關(guān)鍵邏輯的運(yùn)行時(shí)數(shù)據(jù)。
  • Trace(追蹤):最詳細(xì)的信息,一般只在日志文件中記錄。

3 當(dāng)日志級(jí)別較低時(shí),進(jìn)行日志開(kāi)關(guān)判斷

對(duì)于較低的日志級(jí)別,如trace/debug級(jí)別,必須進(jìn)行日志級(jí)別開(kāi)關(guān)判斷。

User user = new User(666L, "demo");
if (log.isDebugEnabled()) {
    log.debug("userId is: {}", user.getId());
}

由于目前存在以下日志代碼:

logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);

如果配置的日志級(jí)別是warn,上述日志將不會(huì)被打印,但仍會(huì)執(zhí)行字符串拼接操作。如果符號(hào)是對(duì)象,還將執(zhí)行toString()方法,這會(huì)浪費(fèi)系統(tǒng)資源。盡管進(jìn)行了上述操作,但最終日志并未打印出來(lái),因此建議添加日志開(kāi)關(guān)判斷。

4 日志應(yīng)打印出該方法的輸入和輸出參數(shù)

開(kāi)發(fā)人員不需要打印大量的日志,只需要打印能夠快速定位問(wèn)題的有效日志。什么是有效和關(guān)鍵的日志呢?

  • 輸入方法時(shí),打印輸入?yún)?shù)。
  • 方法返回時(shí),打印出參數(shù)和返回值。

就參數(shù)而言,通常是關(guān)鍵信息,比如userId等。

5 日志系統(tǒng)中的API(如Log4j、Logback)不能直接使用,但可以使用日志框架SLF4J中的API

SLF4J是一個(gè)以門(mén)面模式(facade mode)工作的日志框架,有利于統(tǒng)一各個(gè)類(lèi)的維護(hù)和日志處理方法,而且可以輕松替換底層的日志框架且不需要修改代碼。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(Demo.class);

6 當(dāng)遇到諸如 if...else... 或 switch 等條件語(yǔ)句時(shí),盡量在每個(gè)分支的第一行打印日志

當(dāng)遇到 if...else... 或 switch 等條件語(yǔ)句時(shí),應(yīng)盡量在分支的第一行打印日志,這樣在排查問(wèn)題時(shí),可以通過(guò)日志確定進(jìn)入了哪個(gè)分支,代碼邏輯更清晰,也更容易排查問(wèn)題。

if (user.isVip()) {
  log.info("User isVip, Id: {}", user.getUserId());
} else {
  log.info("User not isVip, Id: {}", user.getUserId());
}

以上代碼示例在每個(gè)分支的第一行使用日志打印。

7 建議使用參數(shù)占位符 {} 代替 + 進(jìn)行字符串拼接

錯(cuò)誤的用法:

logger.info("Processing trade with id: " + id + " and symbol: " + symbol);

在上面的例子中,使用 + 運(yùn)算符來(lái)拼接字符串會(huì)帶來(lái)一定的性能損失。

正確的用法:

logger.info("Processing trade with id: {} and symbol: {}", id, symbol);

在日志中使用花括號(hào) {} 作為占位符,這比使用 + 運(yùn)算符更加優(yōu)雅和簡(jiǎn)潔。與負(fù)面示例相比,占位符的使用只是一個(gè)替換操作,可以有效提高性能。

8 不要使用e.printStackTrace()

錯(cuò)誤的用法:

try {
  ...
} catch (Exception e) {
  e.printStackTrace();
}

正確的用法:

try {
  ...
} catch (Exception e) {
  log.error("error", e);
}

使用e.printStackTrace()打印的堆棧日志與業(yè)務(wù)代碼日志交織在一起,通常不方便檢查異常日志。

e.printStackTrace()語(yǔ)句生成的字符串記錄了堆棧信息。如果信息過(guò)長(zhǎng),字符串常量池所在的內(nèi)存塊沒(méi)有空間,也就是內(nèi)存已滿,那么用戶的請(qǐng)求會(huì)被阻塞。

9 建議以異步方式輸出日志

日志最終會(huì)輸出到文件或其他輸出流中,這涉及到IO性能。如果采用異步方式,可以顯著提高IO性能。

除非有特殊要求,建議使用異步方式輸出日志。以logback為例,配置異步非常簡(jiǎn)單,只需使用AsyncAppender:


    

以上配置使用AsyncAppender來(lái)實(shí)現(xiàn)異步輸出日志。

10 禁止在聯(lián)機(jī)環(huán)境中啟用調(diào)試功能

在聯(lián)機(jī)環(huán)境中禁用調(diào)試功能非常重要。

因?yàn)橥ǔO到y(tǒng)會(huì)有大量的調(diào)試日志,各種框架也會(huì)大量使用調(diào)試日志,在線調(diào)試可能會(huì)很快填滿磁盤(pán),影響業(yè)務(wù)系統(tǒng)的正常運(yùn)行。


網(wǎng)頁(yè)標(biāo)題:十個(gè)Java編程中記錄日志的小技巧
URL標(biāo)題:http://www.dlmjj.cn/article/coggcip.html