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

仅将自定义字段添加到 logrus 中的错误日志

仅将自定义字段添加到 logrus 中的错误日志

Go
哈士奇WWW 2022-10-24 15:23:58
我正在使用logrus登录golang。我使用以下语句进行日志记录。logger.Info("") logger.Errorf("Error message")我的要求是仅在Errorf具有以下约束的语句中具有自定义字段(严重性)。如果在日志语句中指定(例如:)logrus.WithField("severity", "critical").Errorf("Error message"),它应该打印指定的值,如下所示。ERRO[0000] Error message            severity=critical如果未指定,则应打印默认值。例如 this( logger.Errorf("Error message")) 日志语句应打印以下内容。ERRO[0000] Error message            severity=normal注意:这应该只发生在Errorf语句上,这意味着其他人应该正常工作。有人可以建议我实现这一目标的方法吗?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

编写自定义Hook,将检查条目是否severity设置了字段,如果没有插入默认值。将该钩子附加到默认全局或您自己的记录器。


logrus.ErrorLevel您可以通过在返回值中仅包含该级别来限制挂钩仅在条目上触发Hook.Levels():


type ErrorHook struct {

}


func (h *ErrorHook) Levels() []logrus.Level {

    // fire only on ErrorLevel (.Error(), .Errorf(), etc.)

    return []logrus.Level{logrus.ErrorLevel}

}


func (h *ErrorHook) Fire(e *logrus.Entry) error {

    // e.Data is a map with all fields attached to entry

    if _, ok := e.Data["severity"]; !ok {

        e.Data["severity"] = "normal"

    }

    return nil

}


func main() {

    logrus.AddHook(&ErrorHook{})


    logrus.WithFields(logrus.Fields{"animal": "walrus"}).Info("A walrus appears")

    // time="2009-11-10T23:00:00Z" level=info msg="A walrus appears" animal=walrus

    logrus.WithFields(logrus.Fields{"animal": "walrus"}).Error("A error walrus appears")

    // time="2009-11-10T23:00:00Z" level=error msg="A error walrus appears" animal=walrus severity=normal

    logrus.WithFields(logrus.Fields{"animal": "walrus", "severity": "high"}).Error("An overriden severity error walrus appears")

    // time="2009-11-10T23:00:00Z" level=error msg="An overriden severity error walrus appears" animal=walrus severity=high

}


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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