Применение Formatter к logrus global logger - PullRequest
0 голосов
/ 26 февраля 2020

Отказ от ответственности: я работал с go около ... дня. Я настоящий n00b здесь ...

Я хочу иметь logrus logger, который настроен с полями по умолчанию в main (), поэтому мне не нужно рассчитывать на то, что другие разработчики всегда регистрируют обязательные поля каждый время. В качестве прототипа у меня есть это, которое работает именно так, как я хочу:

package main
import (
 "github.com/sirupsen/logrus"
)
var (
 log    *logrus.Logger
 logger *logrus.Entry
)
func foo(x, y string) {
 logger.WithFields(logrus.Fields{"A": x, "B": y}).Error("error!")
}
func main() {
 x := "argle"
 y := "bargle"
 log = logrus.New()
 logger = logrus.WithFields(logrus.Fields{"X": x, "Y": y})
//  log.Formatter = &logrus.JSONFormatter{}
 logger.Info("Info!")
 logger.Debug("Debug!")
 foo("xyzzy", "fnord")
}

Проблема в форматере. Я не могу на всю жизнь понять магическое заклинание, чтобы применить Formatter к logger. Если я раскомментирую это как есть, JSON форматирование не применяется. Если я напишу это как

logger.Formatter = &logrus.JSONFormatter{}

, я получу

. / Foo. go: 17: 8: logger.Formatter undefined (тип * logrus.Entry не имеет поля или метода Formatter)

Что я неправильно понял?

1 Ответ

0 голосов
/ 26 февраля 2020

Вы можете использовать logrus.SetFormatter(&logrus.JSONFormatter{}) для изменения формата logrus на JSON. Вот ваш рабочий код с некоторыми изменениями.

package main

import (
    "github.com/sirupsen/logrus"
)

var (
    log    *logrus.Logger
    logger *logrus.Entry
)

func foo(x, y string) {
    logger.WithFields(logrus.Fields{"A": x, "B": y}).Error("error!")
}

func main() {
    x := "argle"
    y := "bargle"

    log = logrus.New()

    logrus.SetFormatter(&logrus.JSONFormatter{})

    logger = logrus.WithFields(logrus.Fields{"X": x, "Y": y})

    logger.Info("Info!")
    logger.Debug("Debug!")
    foo("xyzzy", "fnord")
}

Можно также установить формат logrus для текста, используя

logrus.SetFormatter(&logrus.TextFormatter{})

Не стесняйтесь поиграть с кодом на детская площадка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...