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

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?

最佳答案

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

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,或者如果您想获得更大的灵活性,我建议您设置自己的记录器(使用对数),而不是上面的操作。这将是更清洁的方法。

关于go - 使用Go-Kit Logger API丢失方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58257555/

10-10 02:35