我正在使用 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 关注
- 123 浏览
添加回答
举报
0/150
提交
取消