登录
首页 >  Golang >  Go问答

为Logrus错误日志添加自定义字段

来源:stackoverflow

时间:2024-02-22 19:09:24 322浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《为Logrus错误日志添加自定义字段》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在使用 logrus 登录 golang。我使用以下语句进行日志记录。

logger.info("")
logger.errorf("error message")

我的要求是仅在 errorf 语句中具有自定义字段(严重性),并具有以下约束。

  1. 如果在日志语句中指定(例如:logrus.withfield("severity", "ritic").errorf("error message")),则应打印指定值,如下所示。
erro[0000] error message            severity=critical
  1. 如果未指定,则应打印默认值。例如 this(logger.errorf("error message")) 日志语句应打印以下内容。
ERRO[0000] Error message            severity=normal

注意:这种情况应该只发生在 errorf 语句中,这意味着其他语句应该正常工作。

有人可以建议我一种实现此目标的方法吗?


正确答案


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

您可以通过在 hook.levels() 的返回值中仅包含该级别来限制钩子仅在 logrus.errorlevel 上的条目上触发:

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
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为Logrus错误日志添加自定义字段》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>