gpt4 book ai didi

go - 将格式化程序应用于 logrus 全局记录器

转载 作者:行者123 更新时间:2023-12-01 22:25:07 29 4
gpt4 key购买 nike

免责声明:我已经和 go 一起工作了……大约一天。我在这里是一个真正的n00b...

我想要一个 logrus 记录器,它在 main() 中配置了默认字段,所以我不必指望其他开发人员每次都记录所需的字段。作为原型(prototype),我有这个,它完全符合我的要求:

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 undefined (type *logrus.Entry has no field or method Formatter)



我误解了什么?

最佳答案

您可以使用 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{})
随意使用 playground 上的代码.

关于go - 将格式化程序应用于 logrus 全局记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60419294/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com