如何在 go-kit 中使用 zap logger?
Posted
技术标签:
【中文标题】如何在 go-kit 中使用 zap logger?【英文标题】:How to use zap logger with go-kit? 【发布时间】:2020-02-08 00:49:24 【问题描述】:我想将go-kit logger 库与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.
【问题讨论】:
【参考方案1】:Go Kit 导出自己的日志接口。他们只提供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")
【讨论】:
谢谢,我看到了这个帖子,但我无法让它与 zap 一起使用,非常感谢您提供示例 如果您发布完整的源代码,我会很乐意对其进行修改并更新我的答案。 @JhonD 我检查了 zap 代码以及它是如何在 go-kit 中使用的。不幸的是,它的实现方式与 logrus 不同。我已经更新了我的答案。以上是关于如何在 go-kit 中使用 zap logger?的主要内容,如果未能解决你的问题,请参考以下文章
如何测试从自定义配置构建的 zap Logger 的日志记录?