如何整合哨兵

时间:2021-01-26 19:46:24

标签: go sentry buffalo

我想捕获生产环境中的所有错误并将它们发送到 Sentry。但我无法理解如何将其添加为中间件。我是否需要编写自定义记录器而不是实现 logger.Logger 接口,或者我可以以不同的方式实现?

2 个答案:

答案 0 :(得分:2)

似乎您想要一个哨兵日志中间件。每个大型日志库都应该有自己的中间件实现。例如logrus

import (
  "github.com/sirupsen/logrus"
  "github.com/evalphobia/logrus_sentry"
)

func main() {
  log       := logrus.New()
  hook, err := logrus_sentry.NewSentryHook(YOUR_DSN, []logrus.Level{
    logrus.PanicLevel,
    logrus.FatalLevel,
    logrus.ErrorLevel,
  })

  if err == nil {
    log.Hooks.Add(hook)
  }
}

如果您想创建自己的(假设您使用的是 logrus),则必须实现 interface for the hook,然后自己将这些条目发布到 sentry。

答案 1 :(得分:0)

谢谢,@martinni39 根据你的代码和 Buffalo 手册中的代码我创建了这个函数:

func SentryLogger(lvl logger.Level) logger.FieldLogger {
l := logrus.New()
l.Level = lvl

levels := []logrus.Level{
    logrus.PanicLevel,
    logrus.FatalLevel,
    logrus.ErrorLevel,
}
hook, err := logrus_sentry.NewSentryHook("your sentry dsn", levels)
hook.StacktraceConfiguration.Enable = true
hook.StacktraceConfiguration.IncludeErrorBreadcrumb = true

if err == nil {
    l.Hooks.Add(hook)
}
return logger.Logrus{FieldLogger: l}
}

然后添加到 app.go 中的 buffalo 选项

Logger:      SentryLogger(logger.DebugLevel),