寫在前面:
? ? 關于日志其實有很多想說的,不過將自己整理的文檔轉化為Blog還是比較花時間的,偶有疏漏,請多包涵。
? ? 本篇文章所講均只止于Java。
?
日志的作用:
? ? 1.定位問題,對于一個系統而言,總是會有些意外發生,例如系統接口被抓,被薅羊毛,如果在方法內部記錄好日志,那么就可以定位問題發生的位置、原因、事故對象。
? ? 2.性能優化,對于一些報表或者其他占用IO比較大的業務,通過日志可以進行詳略得當的優化,這在開發時間比較緊的時候,能夠排出先后順序,對于搶占排期有至關重要的作用。
?
常用日志級別:
? ? 1.INFO:對于系統運行期的數據進行記錄,合格INFO信息應該對于具有高需求的數據進行記錄,如金額、積分變化,用戶的個人數據等。另外對于改變應用狀態的信息也應該記錄,例如數據庫更新,其他系統交互等。
? ? 2.DEBUG:對于系統開發時,測試的數據進行記錄,有些時候我們調試的數據并不好找,可以考慮通過Debug的日志信息進行定位,這些不好找的信息包括:其他系統交互,線城池調用等。
? ? 3.ERROR:這個級別的信息必須被處理,一般情況下,出現這種信息都會造成系統功能癱瘓。
? ? 4.WARING:這個級別的信息可以忍受,但是應該被關注,在有時間的時候,進行業務評估,考慮是否需要修復處理。
? ? 以上是常用的四個日志級別,另外還有TRACE等沒有介紹,在日常使用時,不同級別的日志最好輸出到不同的目錄當中,按照日期分類這樣在排查問題時會非常有效。
?
日志的使用:
? ? 1.日志對象的生成:統一使用工廠方式創建對象,減少資源開銷并防止意外篡改。
? ? 2.日志的使用:
? ? ? ? 推薦使用Slf4j,他的可變參數對于提升性能和減少書寫非常有作用,此外推薦插件Lombok,不僅可以通過@Slf4j省去創建日志對象的煩惱,同時可以節省Pojo的構造函數創建以及getter/setter方法。
? ? ? ? 必須注意,如果使用了Lombok,必須保證其他開發者也裝了這個插件,不然會造成毀天滅地的后果。
? ? 3.注意:
? ? ? ? 3.1.debug/info級別的信息,如果業務較復雜,必須添加 isXxxEnabled() 判斷,可以減少日志的無效輸出,提升效率。
? ? ? ? 3.2.error和warn級別的信息,如果導致業務不正常,使用error,如果錯誤可預期,使用warn。
? ? ? ? 3.3.異常捕獲之后應該處理,也就說,打印錯誤信息。捕獲異常范圍過大和捕獲不處理,都是非常不負責任的行為。
? ? ? ? 3.4.敏感信息接口應該記錄日志。
? ? ? ? 3.5.日志信息打印要防止因為打印信息問題而導致的報錯,例如NullPointerException。
? ? ? ? 3.6.日志的分類很重要,應該避免將所有日志輸出到一個文件里;同時,日志中的信息應該脫敏并且盡量清晰明了,過于冗余和過于簡單都是不可取的。
?
總結:
? ? 好的日志可以幫助我們快速定位問題,在系統性能優化中提供可靠的數據幫助分析,在日常開發中,我們應該對于日志信息有更多地重視。本文僅僅是一篇入門級的簡要概述,以期起到拋磚引玉的作用。在日常開發中,日志還有很多需要注意的地方,比如參數化的多參數支持,日志的具體業務分類,這些因應個人環境不同,會有不同的變化。
? ?希望這篇文章能對閱覽的你產生幫助,下期見。