Documentation ¶
Overview ¶
Package raven implements a client for the Sentry error logging service.
Example ¶
// ... i.e. raisedErr is incoming error var raisedErr error // sentry DSN generated by Sentry server var sentryDSN string // r is a request performed when error occurred var r *http.Request client, err := New(sentryDSN) if err != nil { log.Fatal(err) } trace := NewStacktrace(0, 2, nil) packet := NewPacket(raisedErr.Error(), NewException(raisedErr, trace), NewHttp(r)) eventID, ch := client.Capture(packet, nil) if err = <-ch; err != nil { log.Fatal(err) } message := fmt.Sprintf("Captured error with id %s: %q", eventID, raisedErr) log.Println(message)
Output:
Index ¶
- Constants
- Variables
- func Capture(packet *Packet, captureTags map[string]string) (eventID string, ch chan error)
- func CaptureError(err error, tags map[string]string, interfaces ...Interface) string
- func CaptureErrorAndWait(err error, tags map[string]string, interfaces ...Interface) string
- func CaptureMessage(message string, tags map[string]string, interfaces ...Interface) string
- func CaptureMessageAndWait(message string, tags map[string]string, interfaces ...Interface) string
- func CapturePanic(f func(), tags map[string]string, interfaces ...Interface) (interface{}, string)
- func CapturePanicAndWait(f func(), tags map[string]string, interfaces ...Interface) (interface{}, string)
- func Cause(err error) error
- func ClearContext()
- func Close()
- func IncludePaths() []string
- func ProjectID() string
- func Recoverer(handler http.Handler) http.Handler
- func RecoveryHandler(handler func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request)
- func Release() string
- func SetDSN(dsn string) error
- func SetDebug(debug bool)
- func SetDefaultLoggerName(name string)
- func SetEnvironment(environment string)
- func SetHttpContext(h *Http)
- func SetIgnoreErrors(errs ...string) error
- func SetIncludePaths(p []string)
- func SetMaxQueueBuffer(maxCount int)
- func SetRelease(release string)
- func SetSampleRate(rate float32) error
- func SetSourceCodeLoader(loader SourceCodeLoader)
- func SetTagsContext(t map[string]string)
- func SetUserContext(u *User)
- func URL() string
- func Wait()
- func WrapWithExtra(err error, extraInfo map[string]interface{}) error
- type Client
- func (client *Client) Capture(packet *Packet, captureTags map[string]string) (eventID string, ch chan error)
- func (client *Client) CaptureError(err error, tags map[string]string, interfaces ...Interface) string
- func (client *Client) CaptureErrorAndWait(err error, tags map[string]string, interfaces ...Interface) string
- func (client *Client) CaptureMessage(message string, tags map[string]string, interfaces ...Interface) string
- func (client *Client) CaptureMessageAndWait(message string, tags map[string]string, interfaces ...Interface) string
- func (client *Client) CapturePanic(f func(), tags map[string]string, interfaces ...Interface) (err interface{}, errorID string)
- func (client *Client) CapturePanicAndWait(f func(), tags map[string]string, interfaces ...Interface) (err interface{}, errorID string)
- func (client *Client) ClearContext()
- func (client *Client) Close()
- func (client *Client) IncludePaths() []string
- func (client *Client) ProjectID() string
- func (client *Client) Release() string
- func (client *Client) SetDSN(dsn string) error
- func (client *Client) SetDebug(debug bool)
- func (client *Client) SetDefaultLoggerName(name string)
- func (client *Client) SetEnvironment(environment string)
- func (client *Client) SetHttpContext(h *Http)
- func (client *Client) SetIgnoreErrors(errs []string) error
- func (client *Client) SetIncludePaths(p []string)
- func (client *Client) SetRelease(release string)
- func (client *Client) SetSampleRate(rate float32) error
- func (client *Client) SetTagsContext(t map[string]string)
- func (client *Client) SetUserContext(u *User)
- func (client *Client) URL() string
- func (client *Client) Wait()
- type Culpriter
- type ErrWithExtra
- type Exception
- type Exceptions
- type Extra
- type HTTPTransport
- type Http
- type Interface
- type Message
- type Packet
- type Query
- type Severity
- type SourceCodeLoader
- type Stacktrace
- type StacktraceFrame
- type Tag
- type Tags
- type Template
- type Timestamp
- type Transport
- type User
- type Writer
Examples ¶
Constants ¶
Variables ¶
var ( ErrPacketDropped = errors.New("raven: packet dropped") ErrUnableToUnmarshalJSON = errors.New("raven: unable to unmarshal JSON") ErrMissingUser = errors.New("raven: dsn missing public key and/or password") ErrMissingProjectID = errors.New("raven: dsn missing project id") ErrInvalidSampleRate = errors.New("raven: sample rate should be between 0 and 1") )
Internal SDK Error types
var DefaultClient = newClient(nil)
DefaultClient initialize a default *Client instance
var MaxQueueBuffer = 100
MaxQueueBuffer the maximum number of packets that will be buffered waiting to be delivered. Packets will be dropped if the buffer is full. Used by NewClient.
Functions ¶
func Capture ¶
Capture asynchronously delivers a packet to the Sentry server with the default *Client. It is a no-op when client is nil. A channel is provided if it is important to check for a send's success.
func CaptureError ¶
CaptureError formats and delivers an error to the Sentry server using the default *Client. Adds a stacktrace to the packet, excluding the call to this method.
func CaptureErrorAndWait ¶
CaptureErrorAndWait is identical to CaptureError, except it blocks and assures that the event was sent
func CaptureMessage ¶
CaptureMessage formats and delivers a string message to the Sentry server with the default *Client
func CaptureMessageAndWait ¶
CaptureMessageAndWait is identical to CaptureMessage except it blocks and waits for the message to be sent.
func CapturePanic ¶
CapturePanic calls f and then recovers and reports a panic to the Sentry server if it occurs. If an error is captured, both the error and the reported Sentry error ID are returned.
func CapturePanicAndWait ¶
func CapturePanicAndWait(f func(), tags map[string]string, interfaces ...Interface) (interface{}, string)
CapturePanicAndWait is identical to CapturePanic, except it blocks and assures that the event was sent
func Cause ¶
Cause returns the underlying cause of the error, if possible. An error value has a cause if it implements the following interface:
type causer interface { Cause() error }
If the error does not implement Cause, the original error will be returned.
If the cause of the error is nil, then the original error will be returned.
If the error is nil, nil will be returned without further investigation.
Will return the deepest cause which is not nil.
func ClearContext ¶
func ClearContext()
ClearContext clears Context interface on default client by removing tags, user and request information
func IncludePaths ¶
func IncludePaths() []string
IncludePaths returns configured includePaths of default client
func Recoverer ¶
Recoverer wraps the stdlib net/http Mux. Example:
mux := http.NewServeMux ... http.Handle("/", raven.Recoverer(mux))
func RecoveryHandler ¶
func RecoveryHandler(handler func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request)
RecoveryHandler uses Recoverer to wrap the stdlib net/http Mux. Example:
http.HandleFunc("/", raven.RecoveryHandler(func(w http.ResponseWriter, r *http.Request) { ... }))
func SetDefaultLoggerName ¶
func SetDefaultLoggerName(name string)
SetDefaultLoggerName sets the "defaultLoggerName" on the default *Client
func SetEnvironment ¶
func SetEnvironment(environment string)
SetEnvironment sets the "environment" tag on the default *Client
func SetHttpContext ¶
func SetHttpContext(h *Http)
SetHttpContext updates Http of Context interface on default client
func SetIgnoreErrors ¶
SetIgnoreErrors updates ignoreErrors config on default client
func SetIncludePaths ¶
func SetIncludePaths(p []string)
SetIncludePaths updates includePaths config on default client
func SetRelease ¶
func SetRelease(release string)
SetRelease sets the "release" tag on the default *Client
func SetSampleRate ¶
SetSampleRate sets the "sample rate" on the degault *Client
func SetSourceCodeLoader ¶
func SetSourceCodeLoader(loader SourceCodeLoader)
SetSourceCodeLoader overrides currently used loader for the new one
func SetTagsContext ¶
SetTagsContext updates Tags of Context interface on default client
Types ¶
type Client ¶
type Client struct { Tags map[string]string Transport Transport // DropHandler is called when a packet is dropped because the buffer is full. DropHandler func(*Packet) // contains filtered or unexported fields }
Client encapsulates a connection to a Sentry server. It must be initialized by calling NewClient. Modification of fields concurrently with Send or after calling Report for the first time is not thread-safe.
func NewWithTags ¶
NewWithTags constructs a new Sentry client instance with default tags.
func (*Client) Capture ¶
func (client *Client) Capture(packet *Packet, captureTags map[string]string) (eventID string, ch chan error)
Capture asynchronously delivers a packet to the Sentry server. It is a no-op when client is nil. A channel is provided if it is important to check for a send's success.
func (*Client) CaptureError ¶
func (client *Client) CaptureError(err error, tags map[string]string, interfaces ...Interface) string
CaptureError formats and delivers an error to the Sentry server. Adds a stacktrace to the packet, excluding the call to this method.
func (*Client) CaptureErrorAndWait ¶
func (client *Client) CaptureErrorAndWait(err error, tags map[string]string, interfaces ...Interface) string
CaptureErrorAndWait is identical to CaptureError, except it blocks and assures that the event was sent
func (*Client) CaptureMessage ¶
func (client *Client) CaptureMessage(message string, tags map[string]string, interfaces ...Interface) string
CaptureMessage formats and delivers a string message to the Sentry server.
func (*Client) CaptureMessageAndWait ¶
func (client *Client) CaptureMessageAndWait(message string, tags map[string]string, interfaces ...Interface) string
CaptureMessageAndWait is identical to CaptureMessage except it blocks and waits for the message to be sent.
func (*Client) CapturePanic ¶
func (client *Client) CapturePanic(f func(), tags map[string]string, interfaces ...Interface) (err interface{}, errorID string)
CapturePanic calls f and then recovers and reports a panic to the Sentry server if it occurs. If an error is captured, both the error and the reported Sentry error ID are returned.
func (*Client) CapturePanicAndWait ¶
func (client *Client) CapturePanicAndWait(f func(), tags map[string]string, interfaces ...Interface) (err interface{}, errorID string)
CapturePanicAndWait is identical to CapturePanic, except it blocks and assures that the event was sent
func (*Client) ClearContext ¶
func (client *Client) ClearContext()
ClearContext clears Context interface on given client by removing tags, user and request information
func (*Client) IncludePaths ¶
IncludePaths returns configured includePaths of given client
func (*Client) ProjectID ¶
ProjectID returns configured ProjectID of given client
func (*Client) Release ¶
Release returns configured Release of given client
func (*Client) SetDSN ¶
SetDSN updates a client with a new DSN. It safe to call after and concurrently with calls to Report and Send.
func (*Client) SetDefaultLoggerName ¶
SetDefaultLoggerName sets the default logger name.
func (*Client) SetEnvironment ¶
SetEnvironment sets the "environment" tag.
func (*Client) SetHttpContext ¶
SetHttpContext updates Http of Context interface on given client
func (*Client) SetIgnoreErrors ¶
SetIgnoreErrors updates ignoreErrors config on given client
func (*Client) SetIncludePaths ¶
SetIncludePaths updates includePaths config on given client
func (*Client) SetRelease ¶
SetRelease sets the "release" tag.
func (*Client) SetSampleRate ¶
SetSampleRate sets how much sampling we want on client side
func (*Client) SetTagsContext ¶
SetTagsContext updates Tags of Context interface on given client
func (*Client) SetUserContext ¶
SetUserContext updates User of Context interface on given client
type Culpriter ¶
type Culpriter interface {
Culprit() string
}
Culpriter holds information about the exception culprit
type ErrWithExtra ¶
type ErrWithExtra interface { Cause() error // contains filtered or unexported methods }
ErrWithExtra links Error with attached user-provided extras that will be reported alongside the Error
type Exception ¶
type Exception struct { // Required Value string `json:"value"` // Optional Type string `json:"type,omitempty"` Module string `json:"module,omitempty"` Stacktrace *Stacktrace `json:"stacktrace,omitempty"` }
Exception defines Sentry's spec compliant interface holding Exception information - https://docs.sentry.io/development/sdk-dev/interfaces/exception/
func NewException ¶
func NewException(err error, stacktrace *Stacktrace) *Exception
NewException constructs an Exception using provided Error and Stacktrace
func (*Exception) Class ¶
Class provides name of implemented Sentry's interface
type Exceptions ¶
type Exceptions struct { // Required Values []*Exception `json:"values"` }
Exceptions defines Sentry's spec compliant interface holding Exceptions information - https://docs.sentry.io/development/sdk-dev/interfaces/exception/
func (Exceptions) Class ¶
func (es Exceptions) Class() string
Class provides name of implemented Sentry's interface
type Extra ¶
type Extra map[string]interface{}
Extra keeps track of any additional information that developer wants to attach to the final packet
type HTTPTransport ¶
HTTPTransport is the default transport, delivering packets to Sentry via the HTTP API.
func (*HTTPTransport) Send ¶
func (t *HTTPTransport) Send(url, authHeader string, packet *Packet) error
Send uses HTTPTransport to send a Packet to configured Sentry's DSN endpoint
type Http ¶
type Http struct { // Required URL string `json:"url"` Method string `json:"method"` Query string `json:"query_string,omitempty"` // Optional Cookies string `json:"cookies,omitempty"` Headers map[string]string `json:"headers,omitempty"` Env map[string]string `json:"env,omitempty"` // Must be either a string or map[string]string Data interface{} `json:"data,omitempty"` }
Http defines Sentry's spec compliant interface holding Request information - https://docs.sentry.io/development/sdk-dev/interfaces/http/
func NewHttp ¶
NewHttp creates new HTTP object that follows Sentry's HTTP interface spec and will be attached to the Packet
type Interface ¶
type Interface interface { // The Sentry class name. Example: sentry.interfaces.Stacktrace Class() string }
An Interface is a Sentry interface that will be serialized as JSON. It must implement json.Marshaler or use json struct tags.
type Message ¶
type Message struct { // Required Message string `json:"message"` // Optional Params []interface{} `json:"params,omitempty"` }
Message defines Sentry's spec compliant interface holding Message information - https://docs.sentry.io/development/sdk-dev/interfaces/message/
type Packet ¶
type Packet struct { // Required Message string `json:"message"` // Required, set automatically by Client.Send/Report via Packet.Init if blank EventID string `json:"event_id"` Project string `json:"project"` Timestamp Timestamp `json:"timestamp"` Level Severity `json:"level"` Logger string `json:"logger"` // Optional Platform string `json:"platform,omitempty"` Culprit string `json:"culprit,omitempty"` ServerName string `json:"server_name,omitempty"` Release string `json:"release,omitempty"` Environment string `json:"environment,omitempty"` Tags Tags `json:"tags,omitempty"` Modules map[string]string `json:"modules,omitempty"` Fingerprint []string `json:"fingerprint,omitempty"` Extra Extra `json:"extra,omitempty"` Interfaces []Interface `json:"-"` }
Packet defines Sentry's spec compliant interface holding Event information (top-level object) - https://docs.sentry.io/development/sdk-dev/attributes/
func NewPacket ¶
NewPacket constructs a packet with the specified message and interfaces.
func NewPacketWithExtra ¶
NewPacketWithExtra constructs a packet with the specified message, extra information, and interfaces.
func (*Packet) AddTags ¶
AddTags appends new tags to the existing ones
func (*Packet) Init ¶
Init initializes required fields in a packet. It is typically called by Client.Send/Report automatically.
type Query ¶
type Query struct { // Required Query string `json:"query"` // Optional Engine string `json:"engine,omitempty"` }
Query defines Sentry's spec compliant interface holding Context information - https://docs.sentry.io/development/sdk-dev/interfaces/contexts/
type SourceCodeLoader ¶
SourceCodeLoader allows to read source code files from the current fs
type Stacktrace ¶
type Stacktrace struct { // Required Frames []*StacktraceFrame `json:"frames"` }
Stacktrace defines Sentry's spec compliant interface holding Stacktrace information - https://docs.sentry.io/development/sdk-dev/interfaces/stacktrace/
func GetOrNewStacktrace ¶
func GetOrNewStacktrace(err error, skip int, context int, appPackagePrefixes []string) *Stacktrace
GetOrNewStacktrace tries to get stacktrace from err as an interface of github.com/pkg/errors, or else NewStacktrace()
func NewStacktrace ¶
func NewStacktrace(skip int, context int, appPackagePrefixes []string, ignoreFiles ...string) *Stacktrace
NewStacktrace intializes and populates a new stacktrace, skipping skip frames.
context is the number of surrounding lines that should be included for context. Setting context to 3 would try to get seven lines. Setting context to -1 returns one line with no surrounding context, and 0 returns no context.
appPackagePrefixes is a list of prefixes used to check whether a package should be considered "in app".
func (*Stacktrace) Class ¶
func (s *Stacktrace) Class() string
Class provides name of implemented Sentry's interface
func (*Stacktrace) Culprit ¶
func (s *Stacktrace) Culprit() string
Culprit iterates through stacktrace frames and returns first in-app frame's information
type StacktraceFrame ¶
type StacktraceFrame struct { // At least one required Filename string `json:"filename,omitempty"` Function string `json:"function,omitempty"` Module string `json:"module,omitempty"` // Optional Lineno int `json:"lineno,omitempty"` Colno int `json:"colno,omitempty"` AbsolutePath string `json:"abs_path,omitempty"` ContextLine string `json:"context_line,omitempty"` PreContext []string `json:"pre_context,omitempty"` PostContext []string `json:"post_context,omitempty"` InApp bool `json:"in_app"` }
StacktraceFrame defines Sentry's spec compliant interface holding Frame information - https://docs.sentry.io/development/sdk-dev/interfaces/stacktrace/
func NewStacktraceFrame ¶
func NewStacktraceFrame(pc uintptr, fName, file string, line, context int, appPackagePrefixes []string) *StacktraceFrame
NewStacktraceFrame builds a single frame using data returned from runtime.Caller.
context is the number of surrounding lines that should be included for context. Setting context to 3 would try to get seven lines. Setting context to -1 returns one line with no surrounding context, and 0 returns no context.
appPackagePrefixes is a list of prefixes used to check whether a package should be considered "in app".
type Tag ¶
Tag is a key:value pair of strings provided by user to better categorize events
func (*Tag) MarshalJSON ¶
MarshalJSON returns the JSON encoding of a tag
type Template ¶
type Template struct { // Required Filename string `json:"filename"` Lineno int `json:"lineno"` ContextLine string `json:"context_line"` // Optional PreContext []string `json:"pre_context,omitempty"` PostContext []string `json:"post_context,omitempty"` AbsolutePath string `json:"abs_path,omitempty"` }
Template defines Sentry's spec compliant interface holding Template information - https://docs.sentry.io/development/sdk-dev/interfaces/template/
type Timestamp ¶
Timestamp holds the creation time of a Packet
func (Timestamp) Format ¶
Format return timestamp in configured timestampFormat
func (Timestamp) MarshalJSON ¶
MarshalJSON returns the JSON encoding of a timestamp
type Transport ¶
Transport used in Capture calls that handles communication with the Sentry servers
type User ¶
type User struct { // All fields are optional ID string `json:"id,omitempty"` Username string `json:"username,omitempty"` Email string `json:"email,omitempty"` IP string `json:"ip_address,omitempty"` }
User defines Sentry's spec compliant interface holding User information - https://docs.sentry.io/development/sdk-dev/interfaces/user/