使用带有Go-kit的Zap记录器

时间:2019-10-10 14:24:36

标签: go logging

我想将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 个答案:

答案 0 :(得分: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")



}