Go Logrus按需与syslog挂钩
我使用golang进行日志记录,我有一个包含所有常规函数的包装器,如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)
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。