我正在使用 golang logrus進行日志記錄,并且我有一個包含所有常規函數的包裝器,例如Info(..),Infof(..)等等我想實現一個Audit(..)用于記錄到 syslog 的包裝器函數。我注意到 logrus syslog 掛鉤的問題是,一旦它被掛鉤,每個日志函數都會記錄到 syslog,Infof(..)我也不希望它們這樣做。有沒有辦法可以按需調用 syslog?以外:func (l *WrapLogger) Audit(msg string) {
l.logger.AddHook(syslogHook)
l.logger.Info(msg)
l.logger.ReplaceHooks(logrus.LevelHooks) // removing somehow the hook}謝謝
1 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
如果您嘗試通過其日志級別委派要發送的消息,那么您可以通過設置掛鉤接受的日志級別來做到這一點。
例如:
log.AddHook(&writer.Hook{
Writer: os.Stderr,
LogLevels: []log.Level{ log.WarnLevel },
})
log.AddHook(lSyslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, ""))
log.Info("This will go to syslog")
log.Warn("This will go to stderr")
如果您想根據日志級別路由此否,那么您的建議可能有效,但感覺很奇怪并且可能有競爭條件。
我建議你做的是創建自己的鉤子,獲取鉤子列表并根據消息或調用時傳遞的字段等路由到正確的Info鉤子Warn。
- 1 回答
- 0 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消