Migration Guide

Learn more about how to migrate from the deprecated Raven SDK.

raven-go

Copied
go get github.com/getsentry/raven-go 

sentry-go

Copied
go get github.com/getsentry/sentry-go 

raven-go

Copied
import "github.com/getsentry/raven-go"  func main() { raven.SetDSN("___PUBLIC_DSN___") } 

sentry-go

Copied
import ( "fmt" "github.com/getsentry/sentry-go" )  func main() { err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", // Adds request headers and IP for users,  // visit: https://docs.sentry.io/platforms/go/data-management/data-collected/ for more info  SendDefaultPII: true, })  if err != nil { fmt.Printf("Sentry initialization failed: %v\n", err) } } 

raven-go

Copied
SetDSN() SetDefaultLoggerName() SetDebug() SetEnvironment() SetRelease() SetSampleRate() SetIgnoreErrors() SetIncludePaths() 

sentry-go

Copied
sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", DebugWriter: os.Stderr, Debug: true, Environment: "environment", Release: "my-project-name@1.0.0", SampleRate: 0.5, // IgnoreErrors: TBD, // IncludePaths: TBD }) 

Available options: see Configuration section.

By default, TLS uses the host's root CA set. If you don't have ca-certificates (which should be your go-to way of fixing the missing certificates issue) and want to use gocertifi instead, you can provide pre-loaded cert files as one of the options to sentry.Init call:

Copied
package main  import ( "log"  "github.com/certifi/gocertifi" "github.com/getsentry/sentry-go" )  sentryClientOptions := sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", }  rootCAs, err := gocertifi.CACerts() if err != nil { log.Println("Couldn't load CA Certificates: %v\n", err) } else { sentryClientOptions.CaCerts = rootCAs }  sentry.Init(sentryClientOptions) 

raven-go

Copied
f, err := os.Open("filename.ext") if err != nil { raven.CaptureError(err, nil) } 

sentry-go

Copied
f, err := os.Open("filename.ext") if err != nil { sentry.CaptureException(err) } 

raven-go

Copied
raven.CapturePanic(func() { // do all of the scary things here }, nil) 

sentry-go

Copied
func() { defer sentry.Recover() // do all of the scary things here }() 

raven-go

Copied
raven.CaptureMessage("Something bad happened and I would like to know about that") 

sentry-go

Copied
sentry.CaptureMessage("Something bad happened and I would like to know about that") 

raven-go

Copied
packet := &raven.Packet{ Message: "Hand-crafted event", Extra: &raven.Extra{ "runtime.Version": runtime.Version(), "runtime.NumCPU": runtime.NumCPU(), }, } raven.Capture(packet) 

sentry-go

Copied
event := sentry.NewEvent() event.Message = "Hand-crafted event" event.Extra["runtime.Version"] = runtime.Version() event.Extra["runtime.NumCPU"] = runtime.NumCPU()  sentry.CaptureEvent(event) 

See Context section.

raven-go

Copied
raven.SetSampleRate(0.25) 

sentry-go

Copied
sentry.Init(sentry.ClientOptions{ // ... SampleRate: 0.25, }) 
Copied
raven.CaptureMessageAndWait("Something bad happened and I would like to know about that") 

sentry-go

Copied
sentry.CaptureMessage("Something bad happened and I would like to know about that")  if sentry.Flush(time.Second * 2) { // event delivered } else { // timeout reached } 

raven-go

Copied
raven.CaptureError(err, map[string]string{"browser": "Firefox"}, &raven.Http{ Method: "GET", URL: "https://example.com/raven-go" }) 

sentry-go

Copied
sentry.WithScope(func(scope *sentry.Scope) { scope.SetTag("browser", "Firefox") scope.SetContext("Request", map[string]string{ "Method": "GET", "URL": "https://example.com/raven-go", }) sentry.CaptureException(err) }) 

raven-go

Copied
raven.SetHttpContext(&raven.Http{ Method: "GET", URL: "https://example.com/raven-go", }) 

sentry-go

Copied
sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetContext("Request", map[string]string{ "Method": "GET", "URL": "https://example.com/raven-go", }) }) 

raven-go

Copied
t := map[string]string{"day": "Friday", "sport": "Weightlifting"} raven.SetTagsContext(map[string]string{"day": "Friday", "sport": "Weightlifting"}) 

sentry-go

Copied
sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetTags(map[string]string{"day": "Friday", "sport": "Weightlifting"}) }) 

raven-go

Copied
raven.SetUserContext(&raven.User{ ID: "1337", Username: "kamilogorek", Email: "kamil@sentry.io", IP: "127.0.0.1", }) 

sentry-go

Copied
sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetUser(sentry.User{ ID: "1337", Username: "kamilogorek", Email: "kamil@sentry.io", IPAddress: "127.0.0.1", }) }) 

raven-go

Copied
raven.ClearContext() 

sentry-go

Copied
sentry.ConfigureScope(func(scope *sentry.Scope) { scope.Clear() }) 

raven-go

Copied
path := "filename.ext" f, err := os.Open(path) if err != nil { err = raven.WrapWithExtra(err, map[string]string{"path": path, "cwd": os.Getwd()}) raven.CaptureError(err, nil) } 

sentry-go

Copied
// use `sentry.WithScope`, see "Context / Per-event Section" path := "filename.ext" f, err := os.Open(path) if err != nil { sentry.WithScope(func(scope *sentry.Scope) { scope.SetExtras(map[string]interface{}{"path": path, "cwd": os.Getwd()}) sentry.CaptureException(err) }) } 

raven-go

Copied
mux := http.NewServeMux http.Handle("/", raven.Recoverer(mux))  // or  func root(w http.ResponseWriter, r *http.Request) {} http.HandleFunc("/", raven.RecoveryHandler(root)) 

sentry-go

Copied
go get github.com/getsentry/sentry-go/http 
Copied
import sentryhttp "github.com/getsentry/sentry-go/http" 
Copied
sentryHandler := sentryhttp.New(sentryhttp.Options{ Repanic: false, WaitForDelivery: true, })  mux := http.NewServeMux http.Handle("/", sentryHandler.Handle(mux))  // or  func root(w http.ResponseWriter, r *http.Request) {} http.HandleFunc("/", sentryHandler.HandleFunc(root)) 
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").