Documentation ¶
Overview ¶
Package trace implements utility functions for capturing logs
Package trace implements utility functions for capturing debugging information about file and line in error reports and logs.
Index ¶
- Constants
- func ConvertSystemError(err error) error
- func DebugReport(err error) string
- func ErrorToCode(err error) int
- func Errorf(format string, args ...interface{}) (err error)
- func Fatalf(format string, args ...interface{}) error
- func GetFields(err error) map[string]interface{}
- func IsAccessDenied(err error) bool
- func IsAggregate(err error) bool
- func IsAlreadyExists(e error) bool
- func IsBadParameter(e error) bool
- func IsCompareFailed(e error) bool
- func IsConnectionProblem(e error) bool
- func IsDebug() bool
- func IsEOF(e error) bool
- func IsLimitExceeded(e error) bool
- func IsNotFound(err error) bool
- func IsNotImplemented(e error) bool
- func IsOAuth2(e error) bool
- func IsRetryError(e error) bool
- func IsTerminal(w io.Writer) bool
- func IsTrustError(e error) bool
- func NewAggregate(errs ...error) error
- func NewAggregateFromChannel(errCh chan error, ctx context.Context) error
- func ReadError(statusCode int, respBytes []byte) error
- func SetDebug(enabled bool)
- func Unwrap(err error) error
- func UserMessage(err error) string
- func UserMessageWithFields(err error) string
- func WriteError(w http.ResponseWriter, err error)
- type AccessDeniedError
- type Aggregate
- type AlreadyExistsError
- type BadParameterError
- type CompareFailedError
- type ConnectionProblemError
- type DebugReporter
- type Error
- func AccessDenied(message string, args ...interface{}) Error
- func AlreadyExists(message string, args ...interface{}) Error
- func BadParameter(message string, args ...interface{}) Error
- func CompareFailed(message string, args ...interface{}) Error
- func ConnectionProblem(err error, message string, args ...interface{}) Error
- func LimitExceeded(message string, args ...interface{}) Error
- func NotFound(message string, args ...interface{}) Error
- func NotImplemented(message string, args ...interface{}) Error
- func OAuth2(code, message string, query url.Values) Error
- func Retry(err error, message string, args ...interface{}) Error
- func Trust(err error, message string, args ...interface{}) Error
- func Wrap(err error, args ...interface{}) Error
- func WrapWithMessage(err error, message interface{}, args ...interface{}) Error
- type ErrorWrapper
- type Fields
- type Frame
- type JSONFormatter
- type LimitExceededError
- type NotFoundError
- type NotImplementedError
- type OAuth2Error
- type RawTrace
- type RetryError
- type TextFormatter
- type Trace
- type TraceErr
- func (e *TraceErr) AddField(k string, v interface{}) *TraceErr
- func (e *TraceErr) AddFields(fields map[string]interface{}) *TraceErr
- func (e *TraceErr) AddUserMessage(formatArg interface{}, rest ...interface{}) *TraceErr
- func (e *TraceErr) DebugReport() string
- func (e *TraceErr) Error() string
- func (e *TraceErr) GetFields() map[string]interface{}
- func (e *TraceErr) GoString() string
- func (r *TraceErr) MarshalJSON() ([]byte, error)
- func (e *TraceErr) OrigError() error
- func (e *TraceErr) Unwrap() error
- func (e *TraceErr) UserMessage() string
- type Traces
- type TrustError
- type UDPHook
- type UDPOptionSetter
- type UserMessager
Constants ¶
const ( // FileField is a field with code file added to structured traces FileField = "file" // FunctionField is a field with function name FunctionField = "func" // LevelField returns logging level as set by logrus LevelField = "level" // Component is a field that represents component - e.g. service or // function Component = "trace.component" // ComponentFields is a fields component ComponentFields = "trace.fields" // DefaultComponentPadding is a default padding for component field DefaultComponentPadding = 11 // DefaultLevelPadding is a default padding for level field DefaultLevelPadding = 4 )
const ( // UDPDefaultAddr is a default address to emit logs to UDPDefaultAddr = "127.0.0.1:5000" // UDPDefaultNet is a default network UDPDefaultNet = "udp" )
Variables ¶
This section is empty.
Functions ¶
func ConvertSystemError ¶
ConvertSystemError converts system error to appropriate trace error if it is possible, otherwise, returns original error
func DebugReport ¶
DebugReport returns debug report with all known information about the error including stack trace if it was captured
func ErrorToCode ¶
ErrorToCode returns an appropriate HTTP status code based on the provided error type
func Errorf ¶
Errorf is similar to fmt.Errorf except that it captures more information about the origin of error, such as callee, line number and function that simplifies debugging
func IsAccessDenied ¶
IsAccessDenied detects if this error is of AccessDeniedError type
func IsAggregate ¶
IsAggregate returns whether this error of Aggregate error type
func IsAlreadyExists ¶
IsAlreadyExists returns whether this is error indicating that object already exists
func IsBadParameter ¶
IsBadParameter returns whether this error is of BadParameterType
func IsCompareFailed ¶
IsCompareFailed detects if this error is of CompareFailed type
func IsConnectionProblem ¶
IsConnectionProblem returns whether this error is of ConnectionProblemError
func IsLimitExceeded ¶
IsLimitExceeded detects if this error is of LimitExceededError
func IsNotFound ¶
IsNotFound returns whether this error is of NotFoundError type
func IsNotImplemented ¶
IsNotImplemented returns whether this error is of NotImplementedError type
func IsRetryError ¶
IsRetryError returns whether this error is of ConnectionProblemError
func NewAggregate ¶
NewAggregate creates a new aggregate instance from the specified list of errors
func NewAggregateFromChannel ¶
NewAggregateFromChannel creates a new aggregate instance from the provided errors channel.
A context.Context can be passed in so the caller has the ability to cancel the operation. If this is not desired, simply pass context.Background().
func ReadError ¶
ReadError converts http error to internal error type based on HTTP response code and HTTP body contents if status code does not indicate error, it will return nil
func SetDebug ¶
func SetDebug(enabled bool)
SetDebug turns on/off debugging mode, that causes Fatalf to panic
func UserMessage ¶
UserMessage returns user-friendly part of the error
func UserMessageWithFields ¶
UserMessageWithFields returns user-friendly error with key-pairs as part of the message
func WriteError ¶
func WriteError(w http.ResponseWriter, err error)
WriteError sets up HTTP error response and writes it to writer w
Types ¶
type AccessDeniedError ¶
type AccessDeniedError struct {
Message string `json:"message"`
}
AccessDeniedError indicates denied access
func (*AccessDeniedError) Error ¶
func (e *AccessDeniedError) Error() string
Error is debug - friendly error message
func (*AccessDeniedError) IsAccessDeniedError ¶
func (e *AccessDeniedError) IsAccessDeniedError() bool
IsAccessDeniedError indicates that this error is of AccessDeniedError type
func (*AccessDeniedError) OrigError ¶
func (e *AccessDeniedError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type Aggregate ¶
type Aggregate interface { error // Errors obtains the list of errors this aggregate combines Errors() []error }
Aggregate interface combines several errors into one error
type AlreadyExistsError ¶
type AlreadyExistsError struct {
Message string `json:"message"`
}
AlreadyExistsError indicates that there's a duplicate object that already exists in the storage/system
func (*AlreadyExistsError) Error ¶
func (n *AlreadyExistsError) Error() string
Error returns log friendly description of an error
func (AlreadyExistsError) IsAlreadyExistsError ¶
func (AlreadyExistsError) IsAlreadyExistsError() bool
IsAlreadyExistsError indicates that this error of the AlreadyExistsError type
func (*AlreadyExistsError) OrigError ¶
func (e *AlreadyExistsError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type BadParameterError ¶
type BadParameterError struct {
Message string `json:"message"`
}
BadParameterError indicates that something is wrong with passed parameter to API method
func (*BadParameterError) Error ¶
func (b *BadParameterError) Error() string
Error returns log friendly description of an error
func (*BadParameterError) IsBadParameterError ¶
func (b *BadParameterError) IsBadParameterError() bool
IsBadParameterError indicates that this error is of BadParameterError type
func (*BadParameterError) OrigError ¶
func (b *BadParameterError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type CompareFailedError ¶
type CompareFailedError struct { // Message is user-friendly error message Message string `json:"message"` }
CompareFailedError indicates a failed comparison (e.g. bad password or hash)
func (*CompareFailedError) Error ¶
func (e *CompareFailedError) Error() string
Error is debug - friendly message
func (*CompareFailedError) IsCompareFailedError ¶
func (e *CompareFailedError) IsCompareFailedError() bool
IsCompareFailedError indicates that this is CompareFailedError
func (*CompareFailedError) OrigError ¶
func (e *CompareFailedError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type ConnectionProblemError ¶
ConnectionProblemError indicates a network related problem
func (*ConnectionProblemError) Error ¶
func (c *ConnectionProblemError) Error() string
Error is debug - friendly error message
func (*ConnectionProblemError) IsConnectionProblemError ¶
func (c *ConnectionProblemError) IsConnectionProblemError() bool
IsConnectionProblemError indicates that this error is of ConnectionProblemError type
func (*ConnectionProblemError) OrigError ¶
func (c *ConnectionProblemError) OrigError() error
OrigError returns original error
func (*ConnectionProblemError) Unwrap ¶
func (c *ConnectionProblemError) Unwrap() error
Unwrap returns the wrapped error if any
type DebugReporter ¶
type DebugReporter interface { // DebugReport formats an error for display DebugReport() string }
DebugReporter formats an error for display
type Error ¶
type Error interface { error ErrorWrapper DebugReporter UserMessager // AddMessage adds formatted user-facing message // to the error, depends on the implementation, // usually works as fmt.Sprintf(formatArg, rest...) // but implementations can choose another way, e.g. treat // arguments as structured args AddUserMessage(formatArg interface{}, rest ...interface{}) *TraceErr // AddField adds additional field information to the error AddField(key string, value interface{}) *TraceErr // AddFields adds a map of additional fields to the error AddFields(fields map[string]interface{}) *TraceErr // GetFields returns any fields that have been added to the error GetFields() map[string]interface{} }
Error is an interface that helps to adapt usage of trace in the code When applications define new error types, they can implement the interface
Error handlers can use Unwrap() to retrieve error from the wrapper, or errors.Is()/As() to compare it to another value.
func AccessDenied ¶
AccessDenied returns new instance of AccessDeniedError
func AlreadyExists ¶
AlreadyExists returns a new instance of AlreadyExists error
func BadParameter ¶
BadParameter returns a new instance of BadParameterError
func CompareFailed ¶
CompareFailed returns new instance of CompareFailedError
func ConnectionProblem ¶
ConnectionProblem returns new instance of ConnectionProblemError
func LimitExceeded ¶
LimitExceeded returns whether new instance of LimitExceededError
func NotImplemented ¶
NotImplemented returns a new instance of NotImplementedError
func Wrap ¶
Wrap takes the original error and wraps it into the Trace struct memorizing the context of the error.
func WrapWithMessage ¶
WrapWithMessage wraps the original error into Error and adds user message if any
type ErrorWrapper ¶
type ErrorWrapper interface { // OrigError returns the wrapped error OrigError() error }
ErrorWrapper wraps another error
type Fields ¶
type Fields map[string]interface{}
Fields maps arbitrary keys to values inside an error
type JSONFormatter ¶
type JSONFormatter struct {
log.JSONFormatter
}
JSONFormatter implements logrus.Formatter interface and adds file and line properties to JSON entries
type LimitExceededError ¶
type LimitExceededError struct {
Message string `json:"message"`
}
LimitExceededError indicates rate limit or connection limit problem
func (*LimitExceededError) Error ¶
func (c *LimitExceededError) Error() string
Error is debug - friendly error message
func (*LimitExceededError) IsLimitExceededError ¶
func (c *LimitExceededError) IsLimitExceededError() bool
IsLimitExceededError indicates that this error is of ConnectionProblem
func (*LimitExceededError) OrigError ¶
func (c *LimitExceededError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type NotFoundError ¶
type NotFoundError struct {
Message string `json:"message"`
}
NotFoundError indicates that object has not been found
func (*NotFoundError) Error ¶
func (e *NotFoundError) Error() string
Error returns log friendly description of an error
func (*NotFoundError) IsNotFoundError ¶
func (e *NotFoundError) IsNotFoundError() bool
IsNotFoundError returns true to indicate that is NotFoundError
func (*NotFoundError) OrigError ¶
func (e *NotFoundError) OrigError() error
OrigError returns original error (in this case this is the error itself)
type NotImplementedError ¶
type NotImplementedError struct {
Message string `json:"message"`
}
NotImplementedError defines an error condition to describe the result of a call to an unimplemented API
func (*NotImplementedError) Error ¶
func (e *NotImplementedError) Error() string
Error returns log friendly description of an error
func (*NotImplementedError) IsNotImplementedError ¶
func (e *NotImplementedError) IsNotImplementedError() bool
IsNotImplementedError indicates that this error is of NotImplementedError type
func (*NotImplementedError) OrigError ¶
func (e *NotImplementedError) OrigError() error
OrigError returns original error
type OAuth2Error ¶
type OAuth2Error struct { Code string `json:"code"` Message string `json:"message"` Query url.Values `json:"query"` }
OAuth2Error defined an error used in OpenID Connect Flow (OIDC)
func (*OAuth2Error) Error ¶
func (o *OAuth2Error) Error() string
Error returns log friendly description of an error
func (*OAuth2Error) IsOAuth2Error ¶
func (o *OAuth2Error) IsOAuth2Error() bool
IsOAuth2Error returns whether this error of OAuth2Error type
type RawTrace ¶
type RawTrace struct { // Err specifies the original error Err json.RawMessage `json:"error,omitempty"` // Traces lists the stack traces at the moment the error was recorded Traces `json:"traces,omitempty"` // Message specifies the optional user-facing message Message string `json:"message,omitempty"` // Messages is a list of user messages added to this error. Messages []string `json:"messages,omitempty"` // Fields is a list of key-value-pairs that can be wrapped with the error to give additional context Fields map[string]interface{} `json:"fields,omitempty"` }
RawTrace describes the error trace on the wire
type RetryError ¶
RetryError indicates a transient error type
func (*RetryError) Error ¶
func (c *RetryError) Error() string
Error is debug-friendly error message
func (*RetryError) IsRetryError ¶
func (c *RetryError) IsRetryError() bool
IsRetryError indicates that this error is of RetryError type
func (*RetryError) OrigError ¶
func (c *RetryError) OrigError() error
OrigError returns original error (in this case this is the error itself)
func (*RetryError) Unwrap ¶
func (c *RetryError) Unwrap() error
Unwrap returns the wrapped error if any
type TextFormatter ¶
type TextFormatter struct { // DisableTimestamp disables timestamp output (useful when outputting to // systemd logs) DisableTimestamp bool // ComponentPadding is a padding to pick when displaying // and formatting component field, defaults to DefaultComponentPadding ComponentPadding int // EnableColors enables colored output EnableColors bool // FormatCaller is a function to return (part) of source file path for output. // Defaults to filePathAndLine() if unspecified FormatCaller func() (caller string) }
TextFormatter is logrus-compatible formatter and adds file and line details to every logged entry.
type TraceErr ¶
type TraceErr struct { // Err is the underlying error that TraceErr wraps Err error `json:"error"` // Traces is a slice of stack trace entries for the error Traces `json:"traces,omitempty"` // Message is an optional message that can be wrapped with the original error. // // This field is obsolete, replaced by messages list below. Message string `json:"message,omitempty"` // Messages is a list of user messages added to this error. Messages []string `json:"messages,omitempty"` // Fields is a list of key-value-pairs that can be wrapped with the error to give additional context Fields map[string]interface{} `json:"fields,omitempty"` }
TraceErr contains error message and some additional information about the error origin
func (*TraceErr) AddField ¶
AddField adds a single field to the error wrapper as context for the error
func (*TraceErr) AddUserMessage ¶
AddUserMessage adds user-friendly message describing the error nature
func (*TraceErr) DebugReport ¶
DebugReport returns developer-friendly error report
func (*TraceErr) GoString ¶
GoString formats this trace object for use with with the "%#v" format string
func (*TraceErr) MarshalJSON ¶
MarshalJSON marshals this error as JSON-encoded payload
func (*TraceErr) Unwrap ¶
Unwrap returns the error this TraceErr wraps. The returned error may also wrap another one, Unwrap doesn't recursively get the inner-most error like OrigError does.
func (*TraceErr) UserMessage ¶
UserMessage returns user-friendly error message
type TrustError ¶
type TrustError struct { // Err is original error Err error `json:"-"` Message string `json:"message"` }
TrustError indicates trust-related validation error (e.g. untrusted cert)
func (*TrustError) Error ¶
func (t *TrustError) Error() string
Error returns log-friendly error description
func (*TrustError) IsTrustError ¶
func (*TrustError) IsTrustError() bool
IsTrustError indicates that this error is of TrustError type
func (*TrustError) OrigError ¶
func (t *TrustError) OrigError() error
OrigError returns original error (in this case this is the error itself)
func (*TrustError) Unwrap ¶
func (t *TrustError) Unwrap() error
Unwrap returns the wrapped error if any
type UDPHook ¶
func NewUDPHook ¶
func NewUDPHook(opts ...UDPOptionSetter) (*UDPHook, error)
NewUDPHook returns logrus-compatible hook that sends data to UDP socket
type UDPOptionSetter ¶
type UDPOptionSetter func(f *UDPHook)
UDPOptionSetter represents functional arguments passed to ELKHook
type UserMessager ¶
type UserMessager interface { // UserMessage returns the user message associated with the error if any UserMessage() string }
UserMessager returns a user message associated with the error
Directories ¶
Path | Synopsis |
---|---|
Package trail integrates trace errors with GRPC Example server that sends the GRPC error and attaches metadata: func (s *server) Echo(ctx context.Context, message *gw.StringMessage) (*gw.StringMessage, error) { trace.SetDebug(true) // to tell trace to start attaching metadata // Send sends metadata via grpc header and converts error to GRPC compatible one return nil, trail.Send(ctx, trace.AccessDenied("missing authorization")) } Example client reading error and trace debug info: var header metadata.MD r, err := c.Echo(context.Background(), &gw.StringMessage{Value: message}, grpc.Header(&header)) if err != nil { // FromGRPC reads error, converts it back to trace error and attaches debug metadata // like stack trace of the error origin back to the error err = trail.FromGRPC(err, header) / // this line will log original trace of the error log.Errorf("error saying echo: %v", trace.DebugReport(err)) return }
|
Package trail integrates trace errors with GRPC Example server that sends the GRPC error and attaches metadata: func (s *server) Echo(ctx context.Context, message *gw.StringMessage) (*gw.StringMessage, error) { trace.SetDebug(true) // to tell trace to start attaching metadata // Send sends metadata via grpc header and converts error to GRPC compatible one return nil, trail.Send(ctx, trace.AccessDenied("missing authorization")) } Example client reading error and trace debug info: var header metadata.MD r, err := c.Echo(context.Background(), &gw.StringMessage{Value: message}, grpc.Header(&header)) if err != nil { // FromGRPC reads error, converts it back to trace error and attaches debug metadata // like stack trace of the error origin back to the error err = trail.FromGRPC(err, header) / // this line will log original trace of the error log.Errorf("error saying echo: %v", trace.DebugReport(err)) return } |