[英]How to use ellipsis for zap global logger
您好我正在嘗試將糖記錄器更改為全球更長的時間我檢查了我可以使用的可能字段但我無法解決我的問題
例如在某些情況下我使用
zap.L().Debug("recv_cmd",
zap.String("user", c.GetString("user")),
zap.String("path", c.Request.URL.Path),
)
這是我在大多數情況下使用的,但我有一個不同的情況,就像這樣
params := make([]interface{}, 0, 20)
params = append(params,
"status", c.Writer.Status(),
"method", c.Request.Method
"path", c.Request.URL.Path,
"ip", c.ClientIP(),
)
if len(body) > 0 {
params = append(params, "body", string(body))
}
所以在這種情況下,我沒有在每個請求中都有一個主體,所以 params obj 對每個請求都沒有相同的打擊
我想要的是(這只是一個簡單的演示,我知道縱梁不起作用)
zap.L().Info("Info",
zap.Stringer("request", params...),
)
Logger.Info的定義是:
func (log *Logger) Info(msg string, fields ...Field)
zap.Stringer的定義是:
func Stringer(key string, val fmt.Stringer) Field
因此,您嘗試的操作存在許多問題:
[]interface{}
傳遞給接受 fmt.Stringer 的fmt.Stringer
(因為它沒有實現接口)。zap.Stringer
返回單個Field
,而您實際上是在嘗試記錄多個字段。 我認為您要完成的是( playground )(但我不太清楚params
是專門為日志記錄還是出於其他原因而創建):
var params []zap.Field
params = append(params,
zap.String("status", c.Status),
zap.String("method", c.Method),
zap.String("path", c.URL.Path),
zap.String("ip", c.ClientIP),
)
if len(body) > 0 {
params = append(params, zap.String("body", string(body)))
}
zap.L().Info("Info", params...)
如果這不起作用,請查看 zap 提供的各種編碼器(例如Any
、 Inline
等)。
注意:我已經稍微簡化了你的結構(因為你沒有包括細節)。 如果您包含一個最小可重復示例(即您應該定義使用的結構,但僅限於說明問題所需的程度),則更容易回答此類問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.