免责声明:我一直在和go合作.大概一天。我是这里真正的n00b ..。
我希望有一个logrus记录器,它配置了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")
}问题是格式化程序。在我的一生中,我无法找到一个神奇的咒语来让格式化程序应用到logger中。如果按原样取消注释,则不会应用JSON格式。如果我把它写成
logger.Formatter = &logrus.JSONFormatter{}
我得到了
./foo.go:17:8: logger.Formatter未定义(类型*logrus.Entry没有字段或方法格式化程序)
我误解了什么?
发布于 2020-02-26 18:04:31
您可以使用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()
log.SetFormatter(&logrus.JSONFormatter{})
logger = log.WithFields(logrus.Fields{"X": x, "Y": y})
logger.Info("Info!")
logger.Debug("Debug!")
foo("xyzzy", "fnord")
}还可以将logrus格式设置为文本。
logrus.SetFormatter(&logrus.TextFormatter{})在游乐场上随意使用代码。
https://stackoverflow.com/questions/60419294
复制相似问题