bugsnag.go 821 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package bugsnag
  2. import (
  3. "net/http"
  4. "github.com/bugsnag/bugsnag-go/v2"
  5. "github.com/sirupsen/logrus"
  6. "github.com/imgproxy/imgproxy/v3/config"
  7. )
  8. var enabled bool
  9. type logger struct{}
  10. func (l logger) Printf(format string, v ...interface{}) {
  11. logrus.WithField("source", "bugsnag").Debugf(format, v...)
  12. }
  13. func Init() {
  14. if len(config.BugsnagKey) > 0 {
  15. bugsnag.Configure(bugsnag.Configuration{
  16. APIKey: config.BugsnagKey,
  17. ReleaseStage: config.BugsnagStage,
  18. PanicHandler: func() {}, // Disable forking the process
  19. Logger: logger{},
  20. })
  21. enabled = true
  22. }
  23. }
  24. func Report(err error, req *http.Request, meta map[string]any) {
  25. if !enabled {
  26. return
  27. }
  28. extra := make(bugsnag.MetaData)
  29. for k, v := range meta {
  30. extra.Add("Processing Context", k, v)
  31. }
  32. bugsnag.Notify(err, req, extra)
  33. }