使用 go-kit 记录器 api 缺少方法

Using go-kit logger api missing methods

我想使用 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 但我不能使用 withFieldsinfo/error/debug 等,知道我在这里缺少什么吗? 由于日志工具包创建了一些工厂,有没有办法使用 logrus api ?

因为log.NewLogrusLogger()创建了未导出的logruslogger,它只有一个方法Log(满足log.Logger接口)。它不支持 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 或者如果你想要更多的灵活性,我建议设置你自己的记录器(使用 logrus)而不是我上面所做的。在 IMO 中,这将是一种更清洁的方法。