为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁星点点滴滴 2023-07-26 19:40:56
我想使用go kit存储库中的记录器,我看到作者还提供了logrus API/factory ,同时尝试使用 logrus 的一些常见 API 功能(如 、withFields和error/ info/panic等)对其进行测试,我不能仅使用它们 log知道如何添加缺少的日志功能吗?logrus.WithField API。这就是我想念的  log.WithFields(log.Fields{    "animal": "walrus",  }).Info("A walrus appears")还有信息/错误/调试等这是我尝试过的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)    logger.Log("hello", "world”)  //working   logger.WithFields(    //doesnt work    logger.Info(      //doesnt work}记录器是类型logrus,但我不能使用withFields或信息/错误/调试等,知道我在这里缺少什么吗?当日志工具包创建一些工厂时,有没有办法使用 logrus api?
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这是因为创建了只有一种方法(满足接口)的log.NewLogrusLogger()未导出。它不支持 logrus 本身的其他方法。logrusloggerLoglog.Logger


此Log方法可以采用键值对中的参数并logrus.Fields在记录时将它们放入。因此,如果您这样做Log("hello", "world"),它会将hello字段的值设置为world。但这不适用于level其他功能。


然而,由于logrus.FieldLogger嵌入在 的实现中logruslogger,我们可以断言我们的记录器的行为如下logrus.FieldLogger,然后执行以下操作:


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).(logrus.FieldLogger)


    logger.Error("Hello")

    logger.Warn("Warning you")


    logger.WithField("good", "bad").Infoln("is it good or bad?")


}


我希望这有帮助。但由于他们只公开了Log方法,因此这些背后可能存在有意识的设计决策。您可以继续使用,Log或者如果您想要更大的灵活性,我建议您设置自己的记录器(使用 logrus),而不是我上面所做的。在我看来,这将是一种更清洁的方法。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 56 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信