如何在 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 的日志记录函数之一的函数类型(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")





【讨论】:

谢谢,我看到了这个帖子,但我无法让它与 zap 一起使用,非常感谢您提供示例 如果您发布完整的源代码,我会很乐意对其进行修改并更新我的答案。 @JhonD 我检查了 zap 代码以及它是如何在 go-kit 中使用的。不幸的是,它的实现方式与 logrus 不同。我已经更新了我的答案。

以上是关于如何在 go-kit 中使用 zap logger?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试从自定义配置构建的 zap Logger 的日志记录?

Zap logger 打印到控制台和日志文件

使用 zap logger 将 protobuf 消息正确记录为未转义的 JSON

如何将钩子添加到 zap 记录器中?

golang zap_logger

从Go log库到Zap,怎么打造出好用又实用的Logger