1

我想将go-kit logger lib 与zap一起使用,我希望它在这个函数中返回 zap.logger 的实例,我将能够像下面这样使用它:(使用 zap 功能)像

logger.Info

或者

logger.WithOptions

ETC

我尝试使用以下方法返回 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.

}
     
4

1 回答 1

1

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")



}

于 2019-10-10T14:40:39.247 回答