# 1 怎么用日志級別?
//核心流程用info,可恢復異常用warn,調試信息用debug,必須要處理的錯誤用error
# 1.1 什么時候打日志?
~~~
info日志:核心流程、重要函數開始/中間/結束需要有info日志,類似于事件模型,preFunc() 、doFunc() 、afterFunc(),可以理解成做這件事需不需要傳遞一個事件出來!pre常用是上游到下游的調用事件需要記錄參數,after常用是調用函數,調用下游成功與否事件,包含返回值和上下文。
debug日志:所有的非正常的邏輯分支都應該至少有一個debug日志,或者warning、error日志出來,可以理解為一個異常的事件。
warning和error日志:錯誤情況必須得有一條錯誤或者警告的日志
~~~
# 2 日志記錄那些數據?
//記錄入口和出口參數,與排查問題時所需要要的參數
~~~
log.Infof("check comment permission start,uid %d,feed_id %d", uid, feedId)
log.Infof("check comment permission end,uid %d,feed_id %d,has permission %t", uid, feedId,hasPersmission)
info:我開始干活了
info:我剛才寫了10W行代碼,所有bug都被修復了
~~~
> 打印指針用*feeds,不過需要注意feeds為nil的情況,打印map[string]pb 可以直接打印出內容,打印[]*int只能打印數組項地址,如果想打印值需要實現String()函數
# 3 線上必須用info級別?
是的,有必要可以修改配置開啟debug,線上查看debug日志
# 4 到底多打還是少打?
做到多一條嫌太多,少一條不夠用
# 5 記錄還是拋給上層?
下層盡量記錄錯誤,并且拋給上層處理錯誤,下層記錄的日志和上層記錄的日志上下文其實是不一樣的