why
日誌是用來記錄程序運行重要的工具
- 記錄請求日誌,關鍵節點打上日誌,可以追蹤問題(生產)
- 方便調試,定位故障
- 監控應用的運行狀態
what(egg.js爲例)
日誌分爲:
- appLogger應用日誌,也是我們自定義的日誌
- coreLogger核心框架,插件日誌
- errorLogger
- agentLogger用於監控agent日誌
日誌級別:
- ctx.logger.debug()
- ctx.logger.info()
- ctx.logger.warn()
- ctx.logger.error()
- 以appLogger爲例,一共4*4種
日誌編碼:
- 默認utf-8
feature
目前日誌都支持切割,每天一個文件,以.log.2019-09-14爲尾綴(小時切割和文件大小切割實用性不高),編寫日誌的時候我們也需要注意如下幾點:
-
在關鍵請求關鍵位置打好日誌
-
打印日誌註明這是哪個文件哪個方法處理的日誌
-
logger.debug(`>>>> Entering yourMethod(month = ${month}, count= ${count}"); //通過日誌 >>>> 和 <<<< 將給出函數輸入和退出的信息
-
-
日誌不能太多,一個是查問題日誌太多,第二個是對硬盤寫入日誌也有一定性能影響(egg是寫入內存,每秒保存一次硬盤)
-
合理使用try-catch來進行日誌輸出
-
日誌寫法一定要避免簡潔,不要日誌再拋錯(正常打印參數,打印處理結果)
-
日誌不能具備除了日誌以外的功能
-
正確把握日誌級別,info記錄信息(最主要的),debug顯示調試信息,warn顯示警告,error保存數據庫請求類型的報錯
-
儘量使用ctx.logger而並非console.log,後者將會把所有日誌打印在stdout中,無法關閉或打開調試信息,並且不區分級別