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



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

洛格鲁斯。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型,但我无法使用withFieldsOR信息/错误/调试等,知道我在这里错过了什么吗? 由于日志工具包创建了一些工厂,有没有办法使用 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(,而不是我上面所做的。这将是海事组织更清洁的做法。

最新更新