Skip to content

Constants & Errors

DD defines a rich set of constants and error types for log-level control, formatting, and error handling.

Log Levels

go
type LogLevel int8 // Log level type
ConstantValueDescription
LevelDebug0Debug level
LevelInfo1Info level (default)
LevelWarn2Warn level
LevelError3Error level
LevelFatal4Fatal level

LogLevel implements String() string (returns "DEBUG"/"INFO"/"WARN"/"ERROR"/"FATAL"; unknown values return "UNKNOWN") and IsValid() bool (whether the level is within the valid range LevelDebug~LevelFatal).

Log Formats

go
type LogFormat int8 // Output format type
ConstantValueDescription
FormatText0Text format
FormatJSON1JSON format

LogFormat implements String() string (returns "text"/"json"; unknown values return "unknown").

Field Validation Modes

go
type FieldValidationMode int // Field key validation mode
ConstantValueDescription
FieldValidationNone0Disable validation (default)
FieldValidationWarn1Warn on validation failure but still accept
FieldValidationStrict2Strict mode; log an error on validation failure

Field Naming Conventions

go
type FieldNamingConvention int // Field key naming convention
ConstantValueDescription
NamingConventionAny0Accept any format (default)
NamingConventionSnakeCase1snake_case (e.g. user_id)
NamingConventionCamelCase2camelCase (e.g. userId)
NamingConventionPascalCase3PascalCase (e.g. UserId)
NamingConventionKebabCase4kebab-case (e.g. user-id)

Hash Algorithms

go
type HashAlgorithm int // Integrity signing hash algorithm
ConstantValueDescription
HashAlgorithmSHA2560SHA-256 algorithm (used by integrity signing)

Default Values

ConstantValueDescription
DefaultTimeFormat"2006-01-02T15:04:05Z07:00"ISO 8601 time format
DefaultLogPath"logs/app.log"Default log file path
DefaultMaxSizeMB100Default file size limit (MB)
DefaultMaxBackups10Default backup count
DefaultMaxAge30 * 24 * time.HourDefault retention period (30 days)

Context Keys

ConstantTypeValue
ContextKeyTraceIDContextKey"trace_id"
ContextKeySpanIDContextKey"span_id"
ContextKeyRequestIDContextKey"request_id"

Error Codes

The LoggerError.Code field contains a machine-readable error-code string, used for fine-grained error-type matching. Error codes are internal implementation details; prefer matching against sentinel errors.

Sentinel Errors

Each error code corresponds to a sentinel error variable:

go
var (
    ErrNilConfig          = errors.New("config cannot be nil")
    ErrNilWriter          = errors.New("writer cannot be nil")
    ErrNilFilter          = errors.New("filter cannot be nil")
    ErrNilHook            = errors.New("hook cannot be nil")
    ErrNilExtractor       = errors.New("context extractor cannot be nil")
    ErrLoggerClosed       = errors.New("logger is closed")
    ErrWriterNotFound     = errors.New("writer not found")
    ErrInvalidLevel       = errors.New("invalid log level")
    ErrInvalidFormat      = errors.New("invalid log format")
    ErrMaxWritersExceeded = errors.New("maximum writer count exceeded")
    ErrEmptyFilePath      = errors.New("file path cannot be empty")
    ErrPathTooLong        = errors.New("file path too long")
    ErrPathTraversal      = errors.New("path traversal detected")
    ErrNullByte           = errors.New("null byte in input")
    ErrInvalidPath        = errors.New("invalid file path")
    ErrSymlinkNotAllowed  = errors.New("symlinks not allowed")
    ErrHardlinkNotAllowed = errors.New("hardlinks not allowed")
    ErrOverlongEncoding   = errors.New("UTF-8 overlong encoding detected")
    ErrMaxSizeExceeded    = errors.New("maximum size exceeded")
    ErrMaxBackupsExceeded = errors.New("maximum backup count exceeded")
    ErrBufferSizeTooLarge = errors.New("buffer size too large")
    ErrInvalidPattern     = errors.New("invalid regex pattern")
    ErrEmptyPattern       = errors.New("pattern cannot be empty")
    ErrPatternTooLong     = errors.New("pattern length exceeds maximum")
    ErrReDoSPattern       = errors.New("pattern contains dangerous nested quantifiers that may cause ReDoS")
    ErrPatternFailed      = errors.New("failed to add pattern")
    ErrConfigValidation   = errors.New("configuration validation failed")
    ErrWriterAdd          = errors.New("failed to add writer")
    ErrMultipleConfigs    = errors.New("multiple configs provided, expected 0 or 1")
    ErrNilMultiWriter     = errors.New("multiwriter is nil")
)

Error Checking

go
if errors.Is(err, dd.ErrLoggerClosed) {
    // Logger is closed
}

if errors.Is(err, dd.ErrPathTraversal) {
    // Path-traversal attack detected
}

Error Types

LoggerError

go
type LoggerError struct {
    Code    string
    Message string
    Cause   error
    Context map[string]any
}

Methods: Error(), Unwrap(), Is(target), WithContext(key, value), WithField(key, value)

go
// LoggerError contains error code, message, cause, and context
// Check sentinel errors via errors.Is
if errors.Is(err, dd.ErrLoggerClosed) {
    // Logger is closed
}

WriterError

go
type WriterError struct {
    Index  int
    Writer io.Writer
    Err    error
}

Methods: Error(), Unwrap()

MultiWriterError

go
type MultiWriterError struct {
    Errors []WriterError
}

Methods: Error(), Unwrap(), HasErrors(), ErrorCount(), FirstError()

Next Steps