使用 go-kit 记录器 api 缺少方法
Using go-kit logger api missing methods
我想使用 go kit 存储库中的记录器,我看到了
作者还提供了 logrus API/factory ,同时尝试使用 logrus 的一些常见 API 功能对其进行测试,例如 withFields
和 error
/ 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
或 info/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 中,这将是一种更清洁的方法。
我想使用 go kit 存储库中的记录器,我看到了
作者还提供了 logrus API/factory ,同时尝试使用 logrus 的一些常见 API 功能对其进行测试,例如 withFields
和 error
/ 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
或 info/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 中,这将是一种更清洁的方法。