我正在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陳述句中,這意味著其他陳述句應該正常作業。
有人可以建議我實作這一目標的方法嗎?
uj5u.com熱心網友回復:
撰寫自定義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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404461.html
標籤:
上一篇:Golang中的正則運算式問題
