首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将格式化程序应用于logrus全局记录器

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

Stack Overflow用户
提问于 2020-02-26 17:23:38
回答 1查看 2.8K关注 0票数 0

免责声明:我一直在和go合作.大概一天。我是这里真正的n00b ..。

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

代码语言:javascript
复制
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没有字段或方法格式化程序)

我误解了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 18:04:31

您可以使用logrus.SetFormatter(&logrus.JSONFormatter{})logrus格式更改为JSON。下面是您的工作代码,并做了一些更改。

代码语言:javascript
复制
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格式设置为文本。

代码语言:javascript
复制
logrus.SetFormatter(&logrus.TextFormatter{})

游乐场上随意使用代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60419294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档