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

Logrus 根据需要与 syslog 挂钩

Logrus 根据需要与 syslog 挂钩

Go
梦里花落0921 2022-07-11 15:35:29
我正在使用 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。


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信