我想使用go kit存储库中的记录器,我看到了
作者还提供了logrus API / factory,同时尝试使用logrus的一些常见API功能(例如,withFields
和error
/ info
/ {{1})对其进行测试}等
我不能只使用它们登录
知道如何添加缺少的日志功能吗?
logrus.WithField API。
这就是我想念的
panic
还有信息/错误/调试等
这就是我尝试过的
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
或 info / error / debug 等,我在这里想念什么吗?
作为日志工具包创建的工厂,有没有办法使用logrus api?
答案 0 :(得分:1)
这是因为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
,或者如果您想获得更大的灵活性,我建议您设置自己的记录器(使用对数),而不是上面的操作。这将是更清洁的方法。