我想使用 go-kit logger lib 与 zap我希望它在这个函数中返回实例 我将能够像下面这样使用 zap.logger:(使用 zap 功能)就像
logger.Info
或
logger.WithOptions
等等
我尝试使用以下方法返回 zap 界面,但它不起作用,方法不可用,知道我在这里缺少什么吗?
func NewZapLogger() zap.Logger {
cfg := zap.Config{
Encoding: "json",
Level: zap.NewAtomicLevelAt(zapcore.DebugLevel),
OutputPaths: []string{"stderr"},
ErrorOutputPaths: []string{"stderr"},
EncoderConfig: zapcore.EncoderConfig{
MessageKey: "message",
LevelKey: "level",
EncodeLevel: zapcore.CapitalLevelEncoder,
TimeKey: "time",
EncodeTime: zapcore.ISO8601TimeEncoder,
CallerKey: "caller",
EncodeCaller: zapcore.FullCallerEncoder,
},
}
logger, _ := cfg.Build()
sugarLogger := logz.NewZapSugarLogger(logger, zap.InfoLevel)
return sugarLogger.
}
最佳答案
Go Kit 导出自己的日志记录接口(interface)。他们只提供Log
方法。它被命名为 zapSugarLogger
,它基本上是一个与 zap
的日志函数之一匹配的函数类型(Infow
、Warnw
等) )。
看起来无法从 zapSugarLogger
实例访问底层 zap 功能。
但是,您可以自己创建一个 zap
实例并照常使用它。
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func main() {
cfg := zap.Config{
Encoding: "json",
Level: zap.NewAtomicLevelAt(zapcore.DebugLevel),
OutputPaths: []string{"stderr"},
ErrorOutputPaths: []string{"stderr"},
EncoderConfig: zapcore.EncoderConfig{
MessageKey: "message",
LevelKey: "level",
EncodeLevel: zapcore.CapitalLevelEncoder,
TimeKey: "time",
EncodeTime: zapcore.ISO8601TimeEncoder,
CallerKey: "caller",
EncodeCaller: zapcore.FullCallerEncoder,
},
}
logger, _ := cfg.Build()
logger.Info("Hello")
}
关于go - 如何将 zap 记录器与 go-kit 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325207/