Go Logrus按需与syslog挂钩

Go Logrus按需与syslog挂钩,go,syslog,logrus,Go,Syslog,Logrus,我使用golang进行日志记录,我有一个包含所有常规函数的包装器,如Info(…),Infof(…)e.t.c我想实现一个用于登录到syslog的包装器函数Audit(…)。 我注意到logrus的问题是,一旦它被钩住,每个日志函数都会记录到syslog,而且Infof(…),我不希望它们这样做 有没有办法按需调用syslog?除: func (l *WrapLogger) Audit(msg string) { l.logger.AddHook(syslogHook)

我使用golang进行日志记录,我有一个包含所有常规函数的包装器,如
Info(…)
Infof(…)
e.t.c我想实现一个用于登录到syslog的包装器函数
Audit(…)
。 我注意到logrus的问题是,一旦它被钩住,每个日志函数都会记录到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
}

谢谢

如果您试图通过其日志级别委派要发送的消息,那么您可以通过设置钩子接受的日志级别来完成

例如:

log.AddHook和writer.Hook{
作者:os.Stderr,
日志级别:[]日志.Level{log.WarnLevel},
})
log.AddHook(lSyslog.NewSyslogHook(“udp”,“localhost:514”,syslog.log\u INFO,”))
Info(“这将转到syslog”)
log.Warn(“这将转到stderr”)
如果您想根据日志级别发送此no,那么您的建议可能会起作用,但它会让人感觉奇怪,并且可能存在竞争条件


我建议您创建自己的钩子,根据消息或调用
Info
Warn
等时传递的字段获取钩子列表并路由到正确的钩子。

我不确定是否理解您的问题。您创建了两个
WrapLogger
实例,如果调用
wl1.info(“hello”)
它将向syslog添加两次“hello”?不完全是@boaz_shuster,我只有一个日志包装器。我的主要问题是:有没有一种方法可以控制调用哪些钩子?现在我正在考虑,也许我应该包装2个logrus实例:一个带有syslog钩子,另一个带有w/o。