最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java日志正確使用姿勢

 更新時間:2019年04月23日 08:34:01   作者:深夜里的程序猿  
這篇文章主要介紹了Java日志正確使用姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

關于日志,在大家的印象中都是比較簡單的,只須引入了相關依賴包,剩下的事情就是在項目中“盡情”的打印我們需要的信息了。但是往往越簡單的東西越容易讓我們忽視,從而導致一些不該有的bug發(fā)生,作為一名嚴謹?shù)某绦騿T,怎么能讓這種事情發(fā)生呢?所以下面我們就來了解一下關于日志的那些正確使用姿勢。

正文

日志規(guī)范

命名

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

保存時間

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

日志級別

常見的日志級別有以下:

  1. DEBUG級別:記錄調(diào)試程序相關的信息。
  2. INFO級別:記錄程序正常運行有意義的信息。
  3. WARN級別:記錄可能會出現(xiàn)潛在錯誤的信息。
  4. ERROR級別:記錄當前程序出錯的信息,需要被關注處理。
  5. Fatal級別:表示出現(xiàn)了嚴重錯誤,程序將會中斷執(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級別的日志,在我們的程序中是比較高頻的存在,當我們的項目大了,日志變多了,這時候為了程序運行的效率,我們必須以條件判斷或者占位符的方式來打印日志。為什么呢?假如我們項目中配置的日志級別為WARN,那么對于我們下面的日志輸出語句‘ logger.debug("server info , id : " + id + ", user : " + user);',雖然該日志不會被打印,但是卻會執(zhí)行字符串拼接的操作,這里我們的user是一個實例對象,所以還會執(zhí)行toString方法,這樣就白白浪費了不少系統(tǒng)的資源。

2、避免多余日志輸出

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

那么這時候該學會使用additivity屬性

<logger name="xx" additivity="true">

在這邊配置成true的話,也就是默認的情況,這時候當前Logger會繼承父Logger的Appender,說白了就是當前日志的輸出除了輸出在當前日志文件以外,還會輸出至父文件里。所以一般情況下,我們?yōu)榱吮苊庵貜痛蛴。瑫⑦@個參數(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)建,否則可能會導致OOM。

5、正確使用日志級別

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

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

6、推薦使用slf4j+logback組合

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

7、日志的聚合分析

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

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

結語

好了,關于日志先聊這么多~ 大家有需要補充或者交流的可以在下方留言哦。

以上所述是小編給大家介紹的Java日志正確使用姿勢詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 8個簡單部分開啟Java語言學習之路 附java學習書單

    8個簡單部分開啟Java語言學習之路 附java學習書單

    8個簡單部分開啟Java語言學習之路,附java學習書單,這篇文章主要向大家介紹了學習java語言的方向,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java時間段查詢將00:00:00更換成23:59:59

    java時間段查詢將00:00:00更換成23:59:59

    本文主要介紹了java時間段查詢將00:00:00更換成23:59:59,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • springMVC+jersey實現(xiàn)跨服務器文件上傳

    springMVC+jersey實現(xiàn)跨服務器文件上傳

    這篇文章主要介紹了springMVC+jersey實現(xiàn)跨服務器文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解決HttpPost+json請求---服務器中文亂碼及其他問題

    解決HttpPost+json請求---服務器中文亂碼及其他問題

    這篇文章主要介紹了解決HttpPost+json請求---服務器中文亂碼及其他問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • JavaTCP上傳文本文件代碼

    JavaTCP上傳文本文件代碼

    今天小編就為大家分享一篇關于JavaTCP上傳文本文件代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • springboot如何解決非controller類引用service的問題

    springboot如何解決非controller類引用service的問題

    這篇文章主要介紹了springboot如何解決非controller類引用service的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實現(xiàn)二分查找BinarySearch算法

    Java實現(xiàn)二分查找BinarySearch算法

    這篇文章主要介紹了Java實現(xiàn)二分查找BinarySearch算法,二分查找針對的是一個有序的數(shù)據(jù)集合,每次都通過跟區(qū)間的中間元素對比,將待查找的區(qū)間縮小為之前的一半,直到找到要查找的元素,或者區(qū)間被縮小為 0,需要的朋友可以參考下
    2023-12-12
  • SpringSecurity rememberme功能實現(xiàn)過程解析

    SpringSecurity rememberme功能實現(xiàn)過程解析

    這篇文章主要介紹了SpringSecurity rememberme功能實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • java中random的用法小結

    java中random的用法小結

    這篇文章主要介紹了java中random的用法詳解,主要包括java.lang.Math.random()方法的用法及java.util.Random類用法,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Maven分模塊開發(fā)執(zhí)行指令失敗的問題

    Maven分模塊開發(fā)執(zhí)行指令失敗的問題

    Maven分模塊開發(fā),行指令失敗,modules.module[3]‘ specifies duplicate child module maven_dao @ line 29, column 1的問題,本文給大家分享解決方法,感興趣的朋友跟隨小編一起看看吧
    2020-09-09

最新評論

济宁市| 双流县| 叙永县| 泽州县| 青铜峡市| 潼关县| 玉屏| 湖北省| 惠安县| 壶关县| 建阳市| 高台县| 云霄县| 安义县| 莱芜市| 崇左市| 南丰县| 浮山县| 潞城市| 通化市| 昆明市| 城固县| 楚雄市| 开封市| 伊川县| 资源县| 阳高县| 惠东县| 西盟| 舒兰市| 黔西县| 卓资县| 屏南县| 土默特右旗| 吴川市| 铁力市| 嘉祥县| 方城县| 铜梁县| 融水| 威信县|