Logrus 按需挂钩系统日志
Logrus hooks with syslog by demand
我正在使用 golang logrus 进行日志记录,我有一个包装器,其中包含我想要实现的 Info(..)
、Infof(..)
e.t.c 等所有常规函数用于记录到系统日志的包装函数 Audit(..)
。
我注意到 logrus syslog hooks 问题是,一旦它被钩住,每个日志函数都会记录到系统日志,还有 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{
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")
如果您想根据日志级别路由此否,那么您的建议可能会起作用,但感觉很奇怪并且可能有 race-conditions。
我建议你做的是创建你自己的挂钩,获取挂钩列表并根据消息或调用 Info
时传递的字段路由到正确的挂钩,Warn
等
我正在使用 golang logrus 进行日志记录,我有一个包装器,其中包含我想要实现的 Info(..)
、Infof(..)
e.t.c 等所有常规函数用于记录到系统日志的包装函数 Audit(..)
。
我注意到 logrus syslog hooks 问题是,一旦它被钩住,每个日志函数都会记录到系统日志,还有 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{
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")
如果您想根据日志级别路由此否,那么您的建议可能会起作用,但感觉很奇怪并且可能有 race-conditions。
我建议你做的是创建你自己的挂钩,获取挂钩列表并根据消息或调用 Info
时传递的字段路由到正确的挂钩,Warn
等