猿问

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

我想要一个 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")

}

问题是格式化程序。我终其一生都无法弄清楚将 Formatter 应用到的魔法咒语logger。如果我按原样取消注释,则不应用 JSON 格式。如果我把它写成


logger.Formatter = &logrus.JSONFormatter{}


我明白了


./foo.go:17:8: logger.Formatter 未定义(类型 *logrus.Entry 没有字段或方法 Formatter)


我误解了什么?


跃然一笑
浏览 201回答 1
1回答

沧海一幻觉

您可以使用logrus.SetFormatter(&logrus.JSONFormatter{})将logrus格式更改为 JSON。这是您的工作代码,并进行了一些更改。package mainimport (    "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上玩代码。
随时随地看视频慕课网APP

相关分类

Go
我要回答