我正在使用golang logrus来记录日志,并且我有一个包含所有常规函数的包装器,比如Info(..),Infof(..) e.t.c。我想实现一个包装器函数Audit(..)来记录到syslog。我注意到logrus syslog hooks的问题是,一旦它被挂起,每个日志函数都会记录到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
}谢谢
发布于 2020-10-29 22:05:30
如果您试图通过日志级别来指定要发送的消息,那么可以通过设置钩子接受的日志级别来实现。
例如:
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")如果你想根据日志级别路由这个no,那么你所建议的可能会起作用,但它感觉很奇怪,而且可能有竞争条件。
我建议你创建你自己的钩子,获得钩子列表,并根据消息或调用Info、Warn等时传递的字段路由到右钩子。
https://stackoverflow.com/questions/64577011
复制相似问题