Table of contents

Go

Установите пакет с помощью go get:

go get github.com/codex-team/hawk.go

Создайте конфигурацию и инициализируйте кэтчер:

options := hawk.DefaultHawkOptions() options.AccessToken = "<TOKEN>" options.Domain = "stage-k1.hawk.so" options.Debug = true options.Transport = hawk.HTTPTransport{} options.AffectedUser = hawk.AffectedUser{Id: "01", Name: "default user"} catcher, err := hawk.New(options) if err != nil { log.Fatal(err) }

Запустите обработку ошибок в отдельной goroutine и корректно остановите кэтчер при завершении:

go catcher.Run() defer catcher.Stop()

Вы можете вручную отправлять ошибки и дополнительный контекст:

err = catcher.Catch(fmt.Errorf("manual exception with context"), hawk.WithContext(struct{ Timestamp string }{Timestamp: strconv.Itoa(int(time.Now().Unix()))}), hawk.WithUser(hawk.AffectedUser{Id: "uid", Name: "N0str"}), hawk.WithRelease("v-3.7"), )

В этом примере вместе с ошибкой передаются:

  • дополнительный контекст;
  • данные пользователя;
  • идентификатор релиза.
package main import ( "fmt" "log" "os" "os/signal" "strconv" "syscall" "time" "github.com/codex-team/hawk.go" ) func main() { options := hawk.DefaultHawkOptions() options.AccessToken = "<TOKEN>" options.Domain = "stage-k1.hawk.so" options.Debug = true options.Transport = hawk.HTTPTransport{} options.AffectedUser = hawk.AffectedUser{Id: "01", Name: "default user"} catcher, err := hawk.New(options) if err != nil { log.Fatal(err) } go catcher.Run() defer catcher.Stop() err = catcher.Catch(fmt.Errorf("manual exception without context")) if err != nil { catcher.Stop() log.Fatal(err) } err = catcher.Catch(fmt.Errorf("manual exception with context"), hawk.WithContext(struct{ Timestamp string }{Timestamp: strconv.Itoa(int(time.Now().Unix()))}), hawk.WithUser(hawk.AffectedUser{Id: "uid", Name: "N0str"}), hawk.WithRelease("v-3.7"), ) if err != nil { catcher.Stop() log.Fatal(err) } // panic var s []interface{} fmt.Println(s[10]) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) <-c }