【问题标题】:Logrus hooks with syslog by demandLogrus 根据需要与 syslog 挂钩
【发布时间】:2020-10-28 16:18:37
【问题描述】:

我正在使用 golang logrus 进行日志记录,并且我有一个包含所有常规函数的包装器,例如 Info(..)Infof(..) 等我想实现一个包装器函数 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
}

谢谢

【问题讨论】:

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

标签: go syslog logrus


【解决方案1】:

如果您尝试通过日志级别委派要发送的消息,则可以通过设置挂钩接受的日志级别来实现。

例如:

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")

如果您想根据日志级别路由此否,那么您的建议可能有效,但感觉很奇怪并且可能存在竞争条件。

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

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多