第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將記錄器作為參數(shù)傳遞給中間件函數(shù)鏈?

如何將記錄器作為參數(shù)傳遞給中間件函數(shù)鏈?

Go
猛跑小豬 2022-10-17 16:07:27
我是 Go 新手,所以請多多包涵。我正在嘗試使用 Uber 的 Zap 日志記錄包。我翻閱了文檔并查看了許多示例,但正在努力尋找如何最好地使用它。他們的常見問題解答部分說要避免使用 Zap 作為全局記錄器,所以我試圖將已初始化的內(nèi)容server.go(緊接在下面)傳遞給其他函數(shù)。// Initialize loggerlogger, err := zap.NewProduction()if err != nil {    log.Fatalf("Failed to initialize zap logger: %v", err)}defer logger.Sync()sugar := logger.Sugar()sugar.Info("Server is starting...")router := http.NewServeMux()server := &http.Server{    Addr:         addr,    Handler:      middleware.Middleware{middleware.RequestIdentifier, middleware.RequestLogger}.Apply(router),    // ...other fields}在Middleware另一個文件中定義的位置為type Middleware []func(http.Handler) http.Handler// Apply() builds the middleware array into a handler chainfunc (midware Middleware) Apply(handler http.Handler) http.Handler {    if len(midware) == 0 {        return handler    }    return midware[:len(midware)-1].Apply(midware[len(midware)-1](handler))}然后在另一個文件 ( request_identifier.go) 中。func RequestIdentifier(next http.Handler) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        //        // ...stuff, and use Zap here        //        next.ServeHTTP(w, r)    })}對于其他中間件功能也是如此。我嘗試過包裝RequestIdentifier并嘗試使用中間件的可接受函數(shù)簽名,但我似乎無法弄清楚如何sugar在不讓我的 IDE 對我大喊大叫的情況下通過。我想要的是這樣的:Handler: middleware.Middleware{middleware.RequestIdentifier(sugar), middleware.RequestLogger(sugar)}.Apply(router)然后在我的中間件函數(shù)中,以某種方式訪問可用的記錄器,如下所示:func RequestIdentifier(next http.Handler, s *zap.SugaredLogger) http.Handler { ... }
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經(jīng)驗 獲得超9個贊

您需要再添加一層閉包:


func RequestIdentifier(s *zap.SugaredLogger) func(http.Handler) http.Handler {

    return func(next http.Handler) http.Handler {

        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

            //

            // ...stuff, and use Zap here

            //

            next.ServeHTTP(w, r)

        })

    }

}


Handler: middleware.Middleware{middleware.RequestIdentifier(sugar), middleware.RequestLogger(sugar)}.Apply(router),



查看完整回答
反對 回復(fù) 2022-10-17
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號