真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java日志怎么用

這篇文章將為大家詳細(xì)講解有關(guān)Java日志怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)服務(wù)緊隨時代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十載的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團(tuán)隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進(jìn)行網(wǎng)站建設(shè)、成都做網(wǎng)站、建設(shè)、維護(hù)、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

正文

日志規(guī)范

命名

首先是日志文件的命名,盡量要做到見名知意,團(tuán)隊里面也必須使用統(tǒng)一的命名規(guī)范,不然“臟亂差”的日志文件會影響大家排查問題的效率。這里推薦以“projectName_logName_logType.log”來命名,這樣通過名字就可以清晰的知道該日志文件是屬于哪個項目,什么類型,有什么作用。例如在我們MessageServer項目中監(jiān)控Rabbitmq 消費(fèi)者相關(guān)的日志文件名可以定義成“messageserver_rabbitmqconsumer_monitor.log”。

保存時間

關(guān)于日志保存的時間,普通的日志文件建議保留15天,若比較重要的可根據(jù)實際情況延長,具體請參考各自服務(wù)器磁盤空間以及日志文件大小作出最優(yōu)選擇。

日志級別

常見的日志級別有以下:

  1. DEBUG級別:記錄調(diào)試程序相關(guān)的信息。

  2. INFO級別:記錄程序正常運(yùn)行有意義的信息。

  3. WARN級別:記錄可能會出現(xiàn)潛在錯誤的信息。

  4. ERROR級別:記錄當(dāng)前程序出錯的信息,需要被關(guān)注處理。

  5. Fatal級別:表示出現(xiàn)了嚴(yán)重錯誤,程序?qū)袛鄨?zhí)行。

建議在項目中使用這四種級別, ERROR、WARN、INFO 、DEBUG。

正確姿勢

1、提前判斷日志級別

//條件判斷
if(logger.isDebugEnabled){
  logger.debug("server info , id : " + id + ", user : " + user);
}

//使用占位符
logger.debug("server info , id : {}, user : {}",id,user);

對于DEBUG,INFO級別的日志,在我們的程序中是比較高頻的存在,當(dāng)我們的項目大了,日志變多了,這時候為了程序運(yùn)行的效率,我們必須以條件判斷或者占位符的方式來打印日志。為什么呢?假如我們項目中配置的日志級別為WARN,那么對于我們下面的日志輸出語句‘ logger.debug("server info , id : " + id + ", user : " + user);',雖然該日志不會被打印,但是卻會執(zhí)行字符串拼接的操作,這里我們的user是一個實例對象,所以還會執(zhí)行toString方法,這樣就白白浪費(fèi)了不少系統(tǒng)的資源。

2、避免多余日志輸出

在我們的生產(chǎn)環(huán)境中,一般禁止DEBUG日志的輸出,其打印的頻率是非常高的,容易對正常運(yùn)行的程序造成嚴(yán)重的影響,在我們最近的項目中就有遇到過類似的情況。

那么這時候該學(xué)會使用additivity屬性

在這邊配置成true的話,也就是默認(rèn)的情況,這時候當(dāng)前Logger會繼承父Logger的Appender,說白了就是當(dāng)前日志的輸出除了輸出在當(dāng)前日志文件以外,還會輸出至父文件里。所以一般情況下,我們?yōu)榱吮苊庵貜?fù)打印,會將這個參數(shù)設(shè)置成false,以減少不必要的輸出。

3、保證日志記錄信息完整

在我們的代碼中,日志記錄的內(nèi)容要包含異常的堆棧,請勿隨意輸出“XX出錯”等簡單的日志,這對于錯誤的調(diào)試毫無幫助。所以我們在記錄異常的時候一定要帶上堆棧信息,例如

logger.error("rabbitmq consumer error,cause : "+e.getMessage(),e);

切記在輸出對象實例的時候,須確保對象重寫了toString方法,否則只會輸出其hashCode值。

4、定義logger變量為static

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

確保一個對象只使用一個Logger對象,避免每次都重新創(chuàng)建,否則可能會導(dǎo)致OOM。

5、正確使用日志級別

try{
  //..
}catch(xx){
  logger.info(..);
}

這樣一來,本來是ERROR的信息,全都打印在INFO日志文件里了,不知情的同事還會在死盯著錯誤日志,而且還找不出問題,多影響工作效率是吧?

6、推薦使用slf4j+logback組合

logback庫里自身就已經(jīng)實現(xiàn)了slf4j的接口,就無需引入多余的適配器了,而且logback也具有更多的優(yōu)點(diǎn),建議新項目可以使用這個組合。
還有一點(diǎn)需要注意,當(dāng)引入slf4j后,要注意其實際使用的日志庫是否是由我們引入的,也有可能會使用了我們第三方依賴包所帶入的日志庫,這樣就可能會導(dǎo)致我們的日志失效。

7、日志的聚合分析

日志的聚合可以把位于不同服務(wù)器之間的日志統(tǒng)一起來分析處理,如今ELK技術(shù)棧亦或者的EFG(fluentd+elasticsearch+grafana)等都是一些比較成熟的開源解決方案。

拿ELK來說,可以在我們的服務(wù)器上直接通過logstash來讀取應(yīng)用打印的日志文件,或者也可以在我們項目中的日志配置文件里配置好相關(guān)的socket信息,打印的時候直接把日志信息輸出至logstash。再交由elasticsearch存儲,kibana展示。

關(guān)于“Java日志怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


當(dāng)前標(biāo)題:Java日志怎么用
標(biāo)題網(wǎng)址:http://weahome.cn/article/jsdooe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部