簡體   English   中英

Golang fasthttp 路由器自定義記錄器

[英]Golang fasthttp router custom logger

我正在玩 fasthttp 和它的路由器,我對基本的東西沒有任何問題,我有一個工作服務器和一個路由器,這是很容易的部分。

問題出在記錄器上,我希望能夠自定義該記錄器,但 ctx.Logger() 似乎不可能,因為它只需要一個 Printf 參數並且格式不是我想要的。

有誰知道我可以在文檔中的哪里找到我想做的工作示例?

我目前擁有的代碼示例:

package server

import (
    "github.com/fasthttp/router"
    "github.com/valyala/fasthttp"
)

// Router will manage the routes of our API server
func Router() *router.Router {
    r := router.New()
    r.GET("/", index)

    return r
}

func index(ctx *fasthttp.RequestCtx) {
    ctx.Logger().Printf("/")
    ctx.WriteString("Welcome!")
}

由於我仍在嘗試使用 web 服務器,但我仍然不了解它和 Go 的某些內容。 所以歡迎舉個例子。

例如,我希望能夠使用主 package 中定義的記錄器來執行類似的操作:

 package server

import (
    "github.com/fasthttp/router"
    "github.com/valyala/fasthttp"
    "go.uber.org/zap"
)

// Router will manage the routes of our API server
func Router(loger *zap.Logger) *router.Router {
    r := router.New()
    r.GET("/", index)

    return r
}

func index(ctx *fasthttp.RequestCtx) {
    ctx.Logger().Printf("/") // Here should print in the zap format of my choice.
    ctx.WriteString("Welcome!")
}

如果您查看源代碼,很明顯您所擁有的只是編寫標准 Go 格式字符串的能力:

func (cl *ctxLogger) Printf(format string, args ...interface{}) {
    msg := fmt.Sprintf(format, args...)
    ctxLoggerLock.Lock()
    cl.logger.Printf("%.3f %s - %s", time.Since(cl.ctx.ConnTime()).Seconds(), cl.ctx.String(), msg)
    ctxLoggerLock.Unlock()
}

記錄器只是從上下文中添加一些附加信息。 因此,超出標准 Go 格式的進一步定制似乎是不可能的。 我不確定“我選擇的 zap 格式”是什么,所以我不能說是否有解決方法,或者即使標准 Go 格式選項在這里為您服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM