1 回答

TA貢獻1816條經驗 獲得超6個贊
每次調用該函數時,都會創建一個新的 *log。輸入并再次將請求 ID 寫入其中。從你的問題來看,聽起來你不希望這樣。logger
func main() {
ctx := context.Background()
ctx = context.WithValue(ctx, keyA, "foo")
ctx = context.WithValue(ctx, keyB, "bar")
lg := logger(ctx)
lg.Info("did nothing")
err := errors.New("an error")
lg.WithError(err).Fatal("unrecoverable error")
}
func logger(ctx context.Context) *log.Entry {
entry := log.WithField("component", "main")
entry = entry.WithField("ReqID", "myRequestID")
return entry
}
這樣做的缺點是,您必須將變量傳遞給此請求調用的每個函數,并且該函數還應記錄請求 ID。lg
我們在公司所做的是創建一個薄層,該層具有一個額外的方法,因此我們可以傳入請求上下文,它將提取請求ID本身(我們已經在中間件中寫入了上下文)。如果不存在任何請求 ID,則不會向日志條目添加任何內容。但是,這確實將請求 ID 再次添加到每個日志條目中,就像您的示例代碼一樣。logrusWithRequestCtx
注意:我們圍繞logrus的薄層具有更多的功能和默認設置,以證明額外的努力是合理的。從長遠來看,有一個地方能夠調整我們所有服務的日志記錄是非常有幫助的。
注意2:同時,我們正在用零日志替換logrus,以使其更加輕量級。
- 1 回答
- 0 關注
- 166 瀏覽
添加回答
舉報