軟件開發(fā)當中一般都要輸出日志,生成日志文件。為了減少日志,很多日志庫支持日志分級。這里為了簡化討論,我們假設兩級,INFO和ERROR。平時開發(fā)的時候,兩個級別的日志都輸出,但是到了正式部署環(huán)境下,只輸出ERROR級別的日志。這個設計看起來很美好,其實很糟糕,沒有用處。
平時開發(fā)的時候,開發(fā)人員已經習慣了豐富的日志,在這種工作環(huán)境下養(yǎng)成了一系列根據日志定位問題的套路。到了正式部署環(huán)境,日志一下子變少了,立馬會變得不適應,定位問題的效率會大幅下降,甚至會出現無法定位的情況。
養(yǎng)兵千日用在一時,輸出日志最終的價值就是體現在定位現場問題。開發(fā)中,其實日志不算太重要,畢竟可以接入斷點,單步跟蹤。即便是依賴日志,也可以重編程序,為定位單個特定問題追加新的日志。但是定位現場問題,日志是我們唯一的定位依據,不可能重新操作反復重現,也不可能為了臨時追加日志重啟系統(tǒng)。特別是定位多線程引發(fā)的故障時,恨不得每個線程每執(zhí)行一行代碼都輸出一行日志,然后腦補這些線程誰先執(zhí)行,誰后執(zhí)行,誰比誰快,誰比誰慢。
那么我們到底該如何做才是正途呢?
- 不要區(qū)分級別,平時開發(fā)和工程現場都是同樣的日志,給開發(fā)人員一個舒服的定位問題的環(huán)境。
- 引入合適的日志收集和壓縮機制,日志都是文本文件,壓縮一下可以極大程度減少文件大小。另外硬盤不值錢,多占用一點也無妨。
- 設計良好的日志文件名,壓縮包的包名,方便日志文件的查找。
- 打印日志的代碼好好設計,方便用程序從多個文件中提取定位某類問題關心的日志信息。
- 下苦功夫,找到并且刪除冗余日志,從源頭真實的減少日志。