亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅將自定義字段添加到 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 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號