如何在 go-kit 中使用 zap logger?

How to use zap logger with go-kit?

我想使用 go-kit logger lib with zap 并且我希望在这个函数中将它用于 return 实例 zap.logger,我将能够像下面这样使用它:(使用 zap 功能)像

logger.Info

logger.WithOptions

等等

我尝试使用以下 return 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 导出自己的日志接口。他们只提供 Log 方法。它被命名为 zapSugarLogger,它基本上是一个与 zap 的日志函数(InfowWarnw 等)之一匹配的函数类型。

看起来无法从 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")



}