Это потому, что 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) вместо того, что я только что сделал выше. Это было бы более чистым подходом ИМО.