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 occured
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)
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 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 SetDefaultLoggerName(name string)
 - func SetEnvironment(environment string)
 - func SetHttpContext(h *Http)
 - func SetIgnoreErrors(errs ...string) error
 - func SetIncludePaths(p []string)
 - 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 (c *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) SetDefaultLoggerName(name string)
 - func (client *Client) SetEnvironment(environment string)
 - func (c *Client) SetHttpContext(h *Http)
 - func (c *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 (c *Client) SetTagsContext(t map[string]string)
 - func (c *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") )
var DefaultClient = newClient(nil)
    Initialize a default *Client instance
var MaxQueueBuffer = 100
    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 ¶
CaptureErrors 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 CaptureError, except it blocks and assures that the event was sent
func ClearContext ¶
func ClearContext()
func IncludePaths ¶
func IncludePaths() []string
func Recoverer ¶
Recovery handler to wrap 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)
Recovery handler 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)
func SetIgnoreErrors ¶
func SetIncludePaths ¶
func SetIncludePaths(p []string)
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)
func SetTagsContext ¶
func SetUserContext ¶
func SetUserContext(u *User)
func WrapWithExtra ¶
Adds extra data to an error before reporting to Sentry
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
CaptureErrors 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 CaptureError, except it blocks and assures that the event was sent
func (*Client) ClearContext ¶
func (c *Client) ClearContext()
func (*Client) IncludePaths ¶
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 ¶
func (*Client) SetIgnoreErrors ¶
func (*Client) SetIncludePaths ¶
func (*Client) SetRelease ¶
SetRelease sets the "release" tag.
func (*Client) SetSampleRate ¶
SetSampleRate sets how much sampling we want on client side
func (*Client) SetTagsContext ¶
func (*Client) SetUserContext ¶
type ErrWithExtra ¶
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"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#failure-interfaces
func NewException ¶
func NewException(err error, stacktrace *Stacktrace) *Exception
type Exceptions ¶
type Exceptions struct {
	// Required
	Values []*Exception `json:"values"`
}
    Exceptions allows for chained errors https://docs.sentry.io/clientdev/interfaces/exception/
func (Exceptions) Class ¶
func (es Exceptions) Class() string
type HTTPTransport ¶
HTTPTransport is the default transport, delivering packets to Sentry via the HTTP API.
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"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#context-interfaces
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"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#message-interface
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:"-"`
}
    https://docs.getsentry.com/hosted/clientdev/#building-the-json-packet
func NewPacketWithExtra ¶
NewPacketWithExtra constructs a packet with the specified message, extra information, and interfaces.
type Query ¶
type Query struct {
	// Required
	Query string `json:"query"`
	// Optional
	Engine string `json:"engine,omitempty"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#context-interfaces
type SourceCodeLoader ¶
type Stacktrace ¶
type Stacktrace struct {
	// Required
	Frames []*StacktraceFrame `json:"frames"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#failure-interfaces
func GetOrNewStacktrace ¶
func GetOrNewStacktrace(err error, skip int, context int, appPackagePrefixes []string) *Stacktrace
Try 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) *Stacktrace
Intialize and populate 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
func (*Stacktrace) Culprit ¶
func (s *Stacktrace) Culprit() string
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"`
}
    func NewStacktraceFrame ¶
func NewStacktraceFrame(pc uintptr, fName, file string, line, context int, appPackagePrefixes []string) *StacktraceFrame
Build 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 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"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#template-interface
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"`
}
    https://docs.getsentry.com/hosted/clientdev/interfaces/#context-interfaces