为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
跃然一笑 2022-05-18 14:49:30
我想要一个 logrus 记录器,它在 main() 中配置了默认字段,所以我不必指望其他开发人员每次都记录所需的字段。作为原型,我有这个,它完全符合我的要求: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() 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)我误解了什么?
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您可以使用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上玩代码。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号