使用 go-kit logger api 缺少的方法

我想使用go kit存储库中的记录器,我看到作者还提供了logrus API/factory ,同时尝试使用 logrus 的一些常见 API 功能(如 、withFieldserrorinfo/panic等)对其进行测试,我不能仅使用它们 log知道如何添加缺少的日志功能吗?

logrus.WithField API。

这就是我想念的

  log.WithFields(log.Fields{

    "animal": "walrus",

  }).Info("A walrus appears")

还有信息/错误/调试等


这是我尝试过的


package main


import (

   log "github.com/go-kit/kit/log/logrus"

   "github.com/sirupsen/logrus"

)


func main() {


   logrusLogger := logrus.New()


   logrusLogger.Formatter = &logrus.JSONFormatter{TimestampFormat: "02-01-2006 15:04:05"}

   logger := log.NewLogrusLogger(logrusLogger)


    logger.Log("hello", "world”)  //working


   logger.WithFields(    //doesnt work


    logger.Info(      //doesnt work


}


记录器是类型logrus,但我不能使用withFields或信息/错误/调试等,知道我在这里缺少什么吗?当日志工具包创建一些工厂时,有没有办法使用 logrus api?


繁星点点滴滴
浏览 77回答 1
1回答

慕哥6287543

这是因为创建了只有一种方法(满足接口)的log.NewLogrusLogger()未导出。它不支持 logrus 本身的其他方法。logrusloggerLoglog.Logger此Log方法可以采用键值对中的参数并logrus.Fields在记录时将它们放入。因此,如果您这样做Log("hello", "world"),它会将hello字段的值设置为world。但这不适用于level其他功能。然而,由于logrus.FieldLogger嵌入在 的实现中logruslogger,我们可以断言我们的记录器的行为如下logrus.FieldLogger,然后执行以下操作:package mainimport (    log "github.com/go-kit/kit/log/logrus"    "github.com/sirupsen/logrus")func main() {    logrusLogger := logrus.New()    logrusLogger.Formatter = &logrus.JSONFormatter{TimestampFormat: "02-01-2006 15:04:05"}    logger := log.NewLogrusLogger(logrusLogger).(logrus.FieldLogger)    logger.Error("Hello")    logger.Warn("Warning you")    logger.WithField("good", "bad").Infoln("is it good or bad?")}我希望这有帮助。但由于他们只公开了Log方法,因此这些背后可能存在有意识的设计决策。您可以继续使用,Log或者如果您想要更大的灵活性,我建议您设置自己的记录器(使用 logrus),而不是我上面所做的。在我看来,这将是一种更清洁的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go