Documentation
¶
Overview ¶
Package ewrap provides enhanced error handling capabilities with stack traces, error wrapping, custom error types, and logging integration.
Index ¶
- func CaptureStack() []uintptr
- func GetMetadataValue[T any](e *Error, key string) (T, bool)
- type CircuitBreaker
- type CircuitState
- type Error
- func (e *Error) CanRetry() bool
- func (e *Error) Cause() error
- func (e *Error) Error() string
- func (e *Error) GetErrorContext() *ErrorContext
- func (e *Error) GetMetadata(key string) (any, bool)
- func (e *Error) GetStackFrames() []StackFrame
- func (e *Error) GetStackIterator() *StackIterator
- func (e *Error) IncrementRetry()
- func (e *Error) Is(target error) bool
- func (e *Error) Log()
- func (e *Error) Stack() string
- func (e *Error) ToJSON(opts ...FormatOption) (string, error)
- func (e *Error) ToYAML(opts ...FormatOption) (string, error)
- func (e *Error) Unwrap() error
- func (e *Error) WithContext(ctx *ErrorContext) *Error
- func (e *Error) WithMetadata(key string, value any) *Error
- type ErrorContext
- type ErrorGroup
- func (eg *ErrorGroup) Add(err error)
- func (eg *ErrorGroup) Clear()
- func (eg *ErrorGroup) Error() string
- func (eg *ErrorGroup) ErrorOrNil() error
- func (eg *ErrorGroup) Errors() []error
- func (eg *ErrorGroup) HasErrors() bool
- func (eg *ErrorGroup) Join() error
- func (eg *ErrorGroup) MarshalJSON() ([]byte, error)
- func (eg *ErrorGroup) MarshalYAML() (any, error)
- func (eg *ErrorGroup) Release()
- func (eg *ErrorGroup) ToJSON() (string, error)
- func (eg *ErrorGroup) ToSerialization() ErrorGroupSerialization
- func (eg *ErrorGroup) ToYAML() (string, error)
- type ErrorGroupPool
- type ErrorGroupSerialization
- type ErrorOutput
- type ErrorType
- type FormatOption
- type Observer
- type Option
- func WithContext(ctx context.Context, errorType ErrorType, severity Severity) Option
- func WithLogger(log logger.Logger) Option
- func WithObserver(observer Observer) Option
- func WithRecoverySuggestion(rs *RecoverySuggestion) Option
- func WithRetry(maxAttempts int, delay time.Duration, opts ...RetryOption) Option
- type RecoverySuggestion
- type RetryInfo
- type RetryOption
- type SerializableError
- type Severity
- type StackFrame
- type StackIterator
- type StackTrace
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CircuitBreaker ¶
type CircuitBreaker struct {
// contains filtered or unexported fields
}
CircuitBreaker implements the circuit breaker pattern for error handling.
func NewCircuitBreaker ¶
func NewCircuitBreaker(name string, maxFailures int, timeout time.Duration) *CircuitBreaker
NewCircuitBreaker creates a new circuit breaker.
func NewCircuitBreakerWithObserver ¶ added in v1.3.2
func NewCircuitBreakerWithObserver(name string, maxFailures int, timeout time.Duration, observer Observer) *CircuitBreaker
NewCircuitBreakerWithObserver creates a new circuit breaker with an observer.
func (*CircuitBreaker) CanExecute ¶
func (cb *CircuitBreaker) CanExecute() bool
CanExecute checks if the operation can be executed.
func (*CircuitBreaker) OnStateChange ¶
func (cb *CircuitBreaker) OnStateChange(callback func(name string, from, to CircuitState))
OnStateChange sets a callback for state changes.
func (*CircuitBreaker) RecordFailure ¶
func (cb *CircuitBreaker) RecordFailure()
RecordFailure records a failure and potentially opens the circuit.
func (*CircuitBreaker) RecordSuccess ¶
func (cb *CircuitBreaker) RecordSuccess()
RecordSuccess records a success and potentially closes the circuit.
func (*CircuitBreaker) SetObserver ¶ added in v1.3.2
func (cb *CircuitBreaker) SetObserver(observer Observer)
SetObserver sets an observer for the circuit breaker.
type CircuitState ¶
type CircuitState int
CircuitState represents the state of a circuit breaker.
const ( // CircuitClosed indicates normal operation. CircuitClosed CircuitState = iota // CircuitOpen indicates the circuit is broken. CircuitOpen // CircuitHalfOpen indicates the circuit is testing recovery. CircuitHalfOpen )
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
Error represents a custom error type with stack trace and metadata.
func (*Error) GetErrorContext ¶ added in v1.3.0
func (e *Error) GetErrorContext() *ErrorContext
GetErrorContext retrieves the context from the error.
func (*Error) GetMetadata ¶
GetMetadata retrieves metadata from the error.
func (*Error) GetStackFrames ¶ added in v1.3.2
func (e *Error) GetStackFrames() []StackFrame
GetStackFrames returns all stack frames as a slice.
func (*Error) GetStackIterator ¶ added in v1.3.2
func (e *Error) GetStackIterator() *StackIterator
GetStackIterator returns a stack iterator for the error's stack trace.
func (*Error) IncrementRetry ¶
func (e *Error) IncrementRetry()
IncrementRetry increments the retry counter.
func (*Error) ToJSON ¶
func (e *Error) ToJSON(opts ...FormatOption) (string, error)
ToJSON converts the error to a JSON string.
func (*Error) ToYAML ¶
func (e *Error) ToYAML(opts ...FormatOption) (string, error)
ToYAML converts the error to a YAML string.
func (*Error) WithContext ¶ added in v1.3.0
func (e *Error) WithContext(ctx *ErrorContext) *Error
WithContext adds context information to the error.
type ErrorContext ¶
type ErrorContext struct {
// Timestamp when the error occurred.
Timestamp time.Time
// Type categorizes the error.
Type ErrorType
// Severity indicates the error's impact level.
Severity Severity
// Operation that was being performed.
Operation string
// Component where the error originated.
Component string
// RequestID for tracing.
RequestID string
// User associated with the operation.
User string
// Environment where the error occurred.
Environment string
// Version of the application.
Version string
// File and line where the error occurred.
File string
Line int
// Additional context-specific data.
Data map[string]any
}
ErrorContext holds comprehensive information about an error's context.
func (*ErrorContext) String ¶
func (ec *ErrorContext) String() string
String returns a formatted string representation of the error context.
type ErrorGroup ¶
type ErrorGroup struct {
// contains filtered or unexported fields
}
ErrorGroup represents a collection of related errors. It maintains a reference to its pool for proper release handling.
func NewErrorGroup ¶
func NewErrorGroup() *ErrorGroup
NewErrorGroup creates a standalone ErrorGroup without pooling. This is useful for cases where pooling isn't needed or for testing.
func (*ErrorGroup) Add ¶
func (eg *ErrorGroup) Add(err error)
Add appends an error to the group if it's not nil.
func (*ErrorGroup) Clear ¶
func (eg *ErrorGroup) Clear()
Clear removes all errors from the group while preserving capacity.
func (*ErrorGroup) Error ¶
func (eg *ErrorGroup) Error() string
Error implements the error interface.
func (*ErrorGroup) ErrorOrNil ¶
func (eg *ErrorGroup) ErrorOrNil() error
ErrorOrNil returns the ErrorGroup itself if it contains errors, or nil if empty.
func (*ErrorGroup) Errors ¶
func (eg *ErrorGroup) Errors() []error
Errors returns a copy of all errors in the group.
func (*ErrorGroup) HasErrors ¶
func (eg *ErrorGroup) HasErrors() bool
HasErrors returns true if the group contains any errors.
func (*ErrorGroup) Join ¶ added in v1.3.0
func (eg *ErrorGroup) Join() error
Join aggregates all errors in the group using errors.Join. It returns nil if the group is empty.
func (*ErrorGroup) MarshalJSON ¶ added in v1.3.2
func (eg *ErrorGroup) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*ErrorGroup) MarshalYAML ¶ added in v1.3.2
func (eg *ErrorGroup) MarshalYAML() (any, error)
MarshalYAML implements the yaml.Marshaler interface.
func (*ErrorGroup) Release ¶
func (eg *ErrorGroup) Release()
Release returns the ErrorGroup to its pool if it came from one. If the ErrorGroup wasn't created from a pool, Release is a no-op.
func (*ErrorGroup) ToJSON ¶ added in v1.3.2
func (eg *ErrorGroup) ToJSON() (string, error)
ToJSON converts the ErrorGroup to JSON format.
func (*ErrorGroup) ToSerialization ¶ added in v1.3.2
func (eg *ErrorGroup) ToSerialization() ErrorGroupSerialization
ToSerialization converts the ErrorGroup to a serializable format.
func (*ErrorGroup) ToYAML ¶ added in v1.3.2
func (eg *ErrorGroup) ToYAML() (string, error)
ToYAML converts the ErrorGroup to YAML format.
type ErrorGroupPool ¶
type ErrorGroupPool struct {
// contains filtered or unexported fields
}
ErrorGroupPool manages a pool of ErrorGroup instances. By making this a separate type, we give users control over pool lifecycle and configuration while maintaining encapsulation.
func NewErrorGroupPool ¶
func NewErrorGroupPool(initialCapacity int) *ErrorGroupPool
NewErrorGroupPool creates a new pool for error groups with the specified initial capacity for the error slices.
func (*ErrorGroupPool) Get ¶
func (p *ErrorGroupPool) Get() *ErrorGroup
Get retrieves an ErrorGroup from the pool or creates a new one if the pool is empty.
type ErrorGroupSerialization ¶ added in v1.3.2
type ErrorGroupSerialization struct {
ErrorCount int `json:"error_count" yaml:"error_count"`
Timestamp string `json:"timestamp" yaml:"timestamp"`
Errors []SerializableError `json:"errors" yaml:"errors"`
}
ErrorGroupSerialization represents the serializable format of an ErrorGroup.
type ErrorOutput ¶
type ErrorOutput struct {
// Message contains the main error message
Message string `json:"message" yaml:"message"`
// Timestamp indicates when the error occurred
Timestamp string `json:"timestamp" yaml:"timestamp"`
// Type categorizes the error
Type string `json:"type" yaml:"type"`
// Severity indicates the error's impact level
Severity string `json:"severity" yaml:"severity"`
// Stack contains the error stack trace
Stack string `json:"stack" yaml:"stack"`
// Cause contains the underlying error if any
Cause *ErrorOutput `json:"cause,omitempty" yaml:"cause,omitempty"`
// Context contains additional error context
Context map[string]any `json:"context,omitempty" yaml:"context,omitempty"`
// Metadata contains user-defined metadata
Metadata map[string]any `json:"metadata,omitempty" yaml:"metadata,omitempty"`
// Recovery provides guidance on resolving the error
Recovery *RecoverySuggestion `json:"recovery,omitempty" yaml:"recovery,omitempty"`
}
ErrorOutput represents a formatted error output structure that can be serialized to various formats like JSON and YAML.
type ErrorType ¶
type ErrorType int
ErrorType represents the type of error that occurred.
const ( // ErrorTypeUnknown represents an unknown error type. ErrorTypeUnknown ErrorType = iota // ErrorTypeValidation represents a validation error. ErrorTypeValidation // ErrorTypeNotFound represents a not found error. ErrorTypeNotFound // ErrorTypePermission represents a permission error. ErrorTypePermission // ErrorTypeDatabase represents a database error. ErrorTypeDatabase // ErrorTypeNetwork represents a network error. ErrorTypeNetwork // ErrorTypeConfiguration represents a configuration error. ErrorTypeConfiguration // ErrorTypeInternal indicates internal system errors. ErrorTypeInternal // ErrorTypeExternal indicates errors from external services. ErrorTypeExternal )
type FormatOption ¶
type FormatOption func(*ErrorOutput)
FormatOption defines formatting options for error output.
func WithStackTrace ¶
func WithStackTrace(include bool) FormatOption
WithStackTrace controls whether to include the stack trace in the output.
func WithTimestampFormat ¶
func WithTimestampFormat(format string) FormatOption
WithTimestampFormat allows customizing the timestamp format in the output.
type Observer ¶ added in v1.3.0
type Observer interface {
// RecordError is called when an error is logged.
RecordError(message string)
// RecordCircuitStateTransition is called when a circuit breaker changes state.
RecordCircuitStateTransition(name string, from, to CircuitState)
}
Observer defines hooks for observing errors and circuit breaker state transitions.
type Option ¶
type Option func(*Error)
Option defines the signature for configuration options.
func WithContext ¶
WithContext adds context information to the error.
func WithObserver ¶ added in v1.3.2
WithObserver sets an observer for the error.
func WithRecoverySuggestion ¶ added in v1.3.0
func WithRecoverySuggestion(rs *RecoverySuggestion) Option
WithRecoverySuggestion attaches recovery guidance to the error.
type RecoverySuggestion ¶
type RecoverySuggestion struct {
// Message provides a human-readable explanation.
Message string `json:"message" yaml:"message"`
// Actions lists specific steps that can be taken.
Actions []string `json:"actions" yaml:"actions"`
// Documentation links to relevant documentation.
Documentation string `json:"documentation" yaml:"documentation"`
}
RecoverySuggestion provides guidance on how to recover from an error.
type RetryInfo ¶
type RetryInfo struct {
// MaxAttempts is the maximum number of retry attempts.
MaxAttempts int
// CurrentAttempt is the current retry attempt.
CurrentAttempt int
// Delay is the delay between retry attempts.
Delay time.Duration
// LastAttempt is the timestamp of the last retry attempt.
LastAttempt time.Time
// ShouldRetry is a function that determines if a retry should be attempted.
ShouldRetry func(error) bool
}
RetryInfo holds information about retry attempts.
type RetryOption ¶ added in v1.3.0
type RetryOption func(*RetryInfo)
RetryOption configures RetryInfo.
func WithRetryShould ¶ added in v1.3.0
func WithRetryShould(fn func(error) bool) RetryOption
WithRetryShould sets a custom ShouldRetry function.
type SerializableError ¶ added in v1.3.2
type SerializableError struct {
Message string `json:"message" yaml:"message"`
Type string `json:"type" yaml:"type"`
StackTrace []StackFrame `json:"stack_trace,omitempty" yaml:"stack_trace,omitempty"`
Metadata map[string]any `json:"metadata,omitempty" yaml:"metadata,omitempty"`
Cause *SerializableError `json:"cause,omitempty" yaml:"cause,omitempty"`
}
SerializableError represents an error in a serializable format.
type Severity ¶
type Severity int
Severity represents the impact level of an error.
const ( // SeverityInfo indicates an informational message. SeverityInfo Severity = iota // SeverityWarning indicates a warning that needs attention. SeverityWarning // SeverityError indicates a significant error. SeverityError // SeverityCritical indicates a critical system failure. SeverityCritical )
type StackFrame ¶ added in v1.3.2
type StackFrame struct {
// Function is the fully qualified function name
Function string `json:"function" yaml:"function"`
// File is the source file path
File string `json:"file" yaml:"file"`
// Line is the line number in the source file
Line int `json:"line" yaml:"line"`
// PC is the program counter for this frame
PC uintptr `json:"pc" yaml:"pc"`
}
StackFrame represents a single frame in a stack trace.
type StackIterator ¶ added in v1.3.2
type StackIterator struct {
// contains filtered or unexported fields
}
StackIterator provides a way to iterate through stack frames.
func NewStackIterator ¶ added in v1.3.2
func NewStackIterator(pcs []uintptr) *StackIterator
NewStackIterator creates a new stack iterator from program counters.
func (*StackIterator) AllFrames ¶ added in v1.3.2
func (si *StackIterator) AllFrames() []StackFrame
AllFrames returns all frames regardless of current position.
func (*StackIterator) Frames ¶ added in v1.3.2
func (si *StackIterator) Frames() []StackFrame
Frames returns all remaining frames as a slice.
func (*StackIterator) HasNext ¶ added in v1.3.2
func (si *StackIterator) HasNext() bool
HasNext returns true if there are more frames to iterate.
func (*StackIterator) Next ¶ added in v1.3.2
func (si *StackIterator) Next() *StackFrame
Next returns the next stack frame, or nil if no more frames.
func (*StackIterator) Reset ¶ added in v1.3.2
func (si *StackIterator) Reset()
Reset resets the iterator to the beginning.
type StackTrace ¶ added in v1.3.2
type StackTrace []StackFrame
StackTrace represents a collection of stack frames.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
observer
command
|
|
|
serialization
command
|
|
|
internal
|
|
|
logger
Package logger provides a standardized logging interface for the application.
|
Package logger provides a standardized logging interface for the application. |
|
pkg
|
|
|
logger/adapters
Package adapters provides logging adapters for popular logging frameworks
|
Package adapters provides logging adapters for popular logging frameworks |