請大家一定不要像我們公司這樣列印log紀錄檔

2023-09-08 12:02:34

前言

最近接手了公司另一個專案,熟悉業務和程式碼苦不堪言。

我接手一個新專案,有個習慣,就是看結構,看資料庫,搜程式碼。

其中搜程式碼是我個人這些年不知不覺形成的癖好,我下面給大家展示下這個小癖好。

正文

我面對一個到手的新專案,會主動去搜尋一些關鍵詞,讓我對這個專案有個整體健康的認識。

1、直接列印堆疊

比如搜尋了printStackTrace(),目的是為了看這個專案中有多少地方直接列印了堆疊。

不搜還好,一搜,沃日,這卷軸,是奏響我悲痛的序章,竟然到處都是這種列印,而且是release分支。

我抽點了一些,看看具體是怎麼寫的,比如下面這樣。

再比如下面這樣,我反正長見識了,也可能只是我不會。

2、堆疊+log

比較典型的可能是下面這樣,我以前就見過不少次,堆疊和log混合雙打。

還無意間發現了這樣的列印方式,log、堆疊、throw,縱享絲滑,一氣呵成,讓我們一起搖擺,哎,一起搖擺哎~

3、log+Json

最後這種,我懷疑是正在看文章的很多人就幹過的,入參列印JSON,舒爽的做法,極致的坑爹。

我公司這個更酸爽,用的還是FastJson。

4、小插曲

寫到這裡,我可以告訴大家我寫這篇文章的初衷不是我想教大家學習,因為這就是常識的東西。

我是因為今天的一件事感到意外。

我同組的工作了12年的Java工程師,做過非常多的專案,也確實很有經驗且有責任心的同事。

他也寫過這樣的程式碼,因為我用IDEA檢視了提交人,其中就有他的貢獻。

另外,我有把上面log+堆疊+throw的寫法給他看看,他的回答非常理所當然。

「這有問題嗎,沒報錯啊」

我當場石化了,然後尷尬的笑笑就聊別的話題了。

講這個小插曲的原因是什麼,一葉知秋,從他身上我能斷定,這樣的工程師比比皆是。

幹了這麼多年,連個基本的紀錄檔規範都沒有概念,哪怕不看什麼阿里編碼規範,至少對基礎性的東西有個瞭解吧。

5、紀錄檔規範

所以,我專程又把以前分享過給大家的阿里巴巴《Java開發手冊(黃山版)》掏出來,找出了裡面紀錄檔規範著重說明的這部分。

正確的列印紀錄檔方式如下:

再看這個,第8條,禁止直接列印堆疊。

第9條,正確的列印異常紀錄檔的規範,我本人也一直都是第9條這種方式列印的。

另外,第10條說的很清楚,為什麼不要在log裡面用JSON轉換工具,說簡單點就是可能會報錯,然後導致業務不走了。

一個紀錄檔列印本來是輔助排查問題用的,結果影響了正常業務流程,你說這是不是隱患。

而且,還告訴你了要如何列印入參,就是用toString()方法就行。

看看,寫得多好,但是有多少人真的看了,都像你買的網課一樣存在那裡擺爛了吧。

總結

希望大家認真看一看,雖然簡單,可很多程式設計師就差這麼點意思,還是要養成好習慣哦。

這個黃山版的阿里Java開發手冊,我重新放到git了,如果沒有,自己去下吧。

Git地址:https://gitee.com/fangfuji/java-share


喜歡請點贊關注↓↓↓,持續分享乾貨哦!