284 lines
8.2 KiB
Markdown
284 lines
8.2 KiB
Markdown
# lixenwraith/log LLM Usage Guide
|
|
|
|
High-performance, thread-safe logging library for Go with file rotation, disk management, and compatibility adapters for popular frameworks.
|
|
|
|
## Core Types
|
|
|
|
### Logger
|
|
```go
|
|
// Primary logger instance. All operations are thread-safe.
|
|
type Logger struct {
|
|
// Internal fields - thread-safe logging implementation
|
|
}
|
|
```
|
|
|
|
### Config
|
|
```go
|
|
// Logger configuration with validation support.
|
|
type Config struct {
|
|
// Basic settings
|
|
Level int64 `toml:"level"`
|
|
Name string `toml:"name"`
|
|
Directory string `toml:"directory"`
|
|
Format string `toml:"format"` // "txt", "json", or "raw"
|
|
Extension string `toml:"extension"`
|
|
|
|
// Formatting
|
|
ShowTimestamp bool `toml:"show_timestamp"`
|
|
ShowLevel bool `toml:"show_level"`
|
|
TimestampFormat string `toml:"timestamp_format"`
|
|
|
|
// Buffer and size limits
|
|
BufferSize int64 `toml:"buffer_size"`
|
|
MaxSizeMB int64 `toml:"max_size_mb"`
|
|
MaxTotalSizeMB int64 `toml:"max_total_size_mb"`
|
|
MinDiskFreeMB int64 `toml:"min_disk_free_mb"`
|
|
|
|
// Timers
|
|
FlushIntervalMs int64 `toml:"flush_interval_ms"`
|
|
TraceDepth int64 `toml:"trace_depth"`
|
|
RetentionPeriodHrs float64 `toml:"retention_period_hrs"`
|
|
RetentionCheckMins float64 `toml:"retention_check_mins"`
|
|
|
|
// Disk check settings
|
|
DiskCheckIntervalMs int64 `toml:"disk_check_interval_ms"`
|
|
EnableAdaptiveInterval bool `toml:"enable_adaptive_interval"`
|
|
EnablePeriodicSync bool `toml:"enable_periodic_sync"`
|
|
MinCheckIntervalMs int64 `toml:"min_check_interval_ms"`
|
|
MaxCheckIntervalMs int64 `toml:"max_check_interval_ms"`
|
|
|
|
// Heartbeat configuration
|
|
HeartbeatLevel int64 `toml:"heartbeat_level"`
|
|
HeartbeatIntervalS int64 `toml:"heartbeat_interval_s"`
|
|
|
|
// Stdout/console output settings
|
|
EnableStdout bool `toml:"enable_stdout"`
|
|
StdoutTarget string `toml:"stdout_target"` // "stdout", "stderr", or "split"
|
|
DisableFile bool `toml:"disable_file"`
|
|
|
|
// Internal error handling
|
|
InternalErrorsToStderr bool `toml:"internal_errors_to_stderr"`
|
|
}
|
|
```
|
|
|
|
## Constants
|
|
|
|
### Log Levels
|
|
```go
|
|
const (
|
|
LevelDebug int64 = -4
|
|
LevelInfo int64 = 0
|
|
LevelWarn int64 = 4
|
|
LevelError int64 = 8
|
|
)
|
|
```
|
|
|
|
### Heartbeat Levels
|
|
```go
|
|
const (
|
|
LevelProc int64 = 12 // Process statistics
|
|
LevelDisk int64 = 16 // Disk usage statistics
|
|
LevelSys int64 = 20 // System statistics
|
|
)
|
|
```
|
|
|
|
## Core Methods
|
|
|
|
### Creation
|
|
```go
|
|
func NewLogger() *Logger
|
|
func DefaultConfig() *Config
|
|
```
|
|
|
|
### Configuration
|
|
```go
|
|
func (l *Logger) ApplyConfig(cfg *Config) error
|
|
func (l *Logger) ApplyOverride(overrides ...string) error
|
|
func (l *Logger) GetConfig() *Config
|
|
```
|
|
|
|
### Logging Methods
|
|
```go
|
|
func (l *Logger) Debug(args ...any)
|
|
func (l *Logger) Info(args ...any)
|
|
func (l *Logger) Warn(args ...any)
|
|
func (l *Logger) Error(args ...any)
|
|
func (l *Logger) LogStructured(level int64, message string, fields map[string]any)
|
|
func (l *Logger) Write(args ...any) // Raw output, no formatting
|
|
func (l *Logger) Log(args ...any) // Timestamp only, no level
|
|
func (l *Logger) Message(args ...any) // No timestamp or level
|
|
```
|
|
|
|
### Trace Logging
|
|
```go
|
|
func (l *Logger) DebugTrace(depth int, args ...any)
|
|
func (l *Logger) InfoTrace(depth int, args ...any)
|
|
func (l *Logger) WarnTrace(depth int, args ...any)
|
|
func (l *Logger) ErrorTrace(depth int, args ...any)
|
|
func (l *Logger) LogTrace(depth int, args ...any)
|
|
```
|
|
|
|
### Control Methods
|
|
```go
|
|
func (l *Logger) Shutdown(timeout ...time.Duration) error
|
|
func (l *Logger) Flush(timeout time.Duration) error
|
|
```
|
|
|
|
### Utilities
|
|
```go
|
|
func Level(levelStr string) (int64, error)
|
|
```
|
|
|
|
## Configuration Builder
|
|
|
|
### ConfigBuilder
|
|
```go
|
|
type ConfigBuilder struct {
|
|
// Internal builder state
|
|
}
|
|
```
|
|
|
|
### Builder Methods
|
|
```go
|
|
func NewConfigBuilder() *ConfigBuilder
|
|
func (b *ConfigBuilder) Build() (*Config, error)
|
|
func (b *ConfigBuilder) Level(level int64) *ConfigBuilder
|
|
func (b *ConfigBuilder) LevelString(level string) *ConfigBuilder
|
|
func (b *ConfigBuilder) Directory(dir string) *ConfigBuilder
|
|
func (b *ConfigBuilder) Format(format string) *ConfigBuilder
|
|
func (b *ConfigBuilder) BufferSize(size int64) *ConfigBuilder
|
|
func (b *ConfigBuilder) MaxSizeMB(size int64) *ConfigBuilder
|
|
func (b *ConfigBuilder) EnableStdout(enable bool) *ConfigBuilder
|
|
func (b *ConfigBuilder) DisableFile(disable bool) *ConfigBuilder
|
|
func (b *ConfigBuilder) HeartbeatLevel(level int64) *ConfigBuilder
|
|
func (b *ConfigBuilder) HeartbeatIntervalS(seconds int64) *ConfigBuilder
|
|
```
|
|
|
|
## Compatibility Adapters (log/compat)
|
|
|
|
### Builder
|
|
```go
|
|
type Builder struct {
|
|
// Internal adapter builder state
|
|
}
|
|
```
|
|
|
|
### Builder Methods
|
|
```go
|
|
func NewBuilder() *Builder
|
|
func (b *Builder) WithLogger(l *log.Logger) *Builder
|
|
func (b *Builder) WithConfig(cfg *log.Config) *Builder
|
|
func (b *Builder) BuildGnet(opts ...GnetOption) (*GnetAdapter, error)
|
|
func (b *Builder) BuildStructuredGnet(opts ...GnetOption) (*StructuredGnetAdapter, error)
|
|
func (b *Builder) BuildFastHTTP(opts ...FastHTTPOption) (*FastHTTPAdapter, error)
|
|
func (b *Builder) GetLogger() (*log.Logger, error)
|
|
```
|
|
|
|
### gnet Adapters
|
|
```go
|
|
type GnetAdapter struct {
|
|
// Implements gnet.Logger interface
|
|
}
|
|
|
|
type StructuredGnetAdapter struct {
|
|
*GnetAdapter
|
|
// Enhanced with field extraction
|
|
}
|
|
|
|
type GnetOption func(*GnetAdapter)
|
|
func WithFatalHandler(handler func(string)) GnetOption
|
|
```
|
|
|
|
### gnet Interface Implementation
|
|
```go
|
|
func (a *GnetAdapter) Debugf(format string, args ...any)
|
|
func (a *GnetAdapter) Infof(format string, args ...any)
|
|
func (a *GnetAdapter) Warnf(format string, args ...any)
|
|
func (a *GnetAdapter) Errorf(format string, args ...any)
|
|
func (a *GnetAdapter) Fatalf(format string, args ...any)
|
|
```
|
|
|
|
### fasthttp Adapter
|
|
```go
|
|
type FastHTTPAdapter struct {
|
|
// Implements fasthttp.Logger interface
|
|
}
|
|
|
|
type FastHTTPOption func(*FastHTTPAdapter)
|
|
func WithDefaultLevel(level int64) FastHTTPOption
|
|
func WithLevelDetector(detector func(string) int64) FastHTTPOption
|
|
```
|
|
|
|
### fasthttp Interface Implementation
|
|
```go
|
|
func (a *FastHTTPAdapter) Printf(format string, args ...any)
|
|
```
|
|
|
|
### Helper Functions
|
|
```go
|
|
func NewGnetAdapter(logger *log.Logger, opts ...GnetOption) *GnetAdapter
|
|
func NewStructuredGnetAdapter(logger *log.Logger, opts ...GnetOption) *StructuredGnetAdapter
|
|
func NewFastHTTPAdapter(logger *log.Logger, opts ...FastHTTPOption) *FastHTTPAdapter
|
|
func DetectLogLevel(msg string) int64
|
|
```
|
|
|
|
## File Management
|
|
|
|
### Rotation
|
|
Files rotate automatically when `MaxSizeMB` is reached. Rotated files use naming pattern: `{name}_{YYMMDD}_{HHMMSS}_{nanoseconds}.{extension}`
|
|
|
|
### Disk Management
|
|
- Enforces `MaxTotalSizeMB` for total log directory size
|
|
- Maintains `MinDiskFreeMB` free disk space
|
|
- Deletes oldest logs when limits exceeded
|
|
|
|
### Retention
|
|
- Time-based cleanup with `RetentionPeriodHrs`
|
|
- Periodic checks via `RetentionCheckMins`
|
|
|
|
## Heartbeat Monitoring
|
|
|
|
### Levels
|
|
- **0**: Disabled (default)
|
|
- **1**: Process stats (logs processed, dropped, uptime)
|
|
- **2**: + Disk stats (rotations, deletions, sizes, free space)
|
|
- **3**: + System stats (memory, GC, goroutines)
|
|
|
|
### Output
|
|
Heartbeats bypass log level filtering and use special levels (PROC, DISK, SYS).
|
|
|
|
## Output Formats
|
|
|
|
### Text Format
|
|
Human-readable with configurable timestamp and level display.
|
|
|
|
### JSON Format
|
|
Machine-parseable with structured fields array.
|
|
|
|
### Raw Format
|
|
Space-separated values without metadata, triggered by `Write()` method or `format=raw`.
|
|
|
|
## Thread Safety
|
|
All public methods are thread-safe. Concurrent logging from multiple goroutines is supported without external synchronization.
|
|
|
|
## Configuration Overrides
|
|
String key-value pairs for runtime configuration changes:
|
|
```
|
|
"level=-4" // Numeric level
|
|
"level=debug" // Named level
|
|
"directory=/var/log" // String value
|
|
"buffer_size=2048" // Integer value
|
|
"enable_stdout=true" // Boolean value
|
|
```
|
|
|
|
## Error Handling
|
|
- Configuration errors prefixed with "log: "
|
|
- Failed initialization disables logger
|
|
- Dropped logs tracked and reported periodically
|
|
- Internal errors optionally written to stderr
|
|
|
|
## Performance Characteristics
|
|
- Non-blocking log submission (buffered channel)
|
|
- Adaptive disk checking based on load
|
|
- Batch file writes with configurable flush interval
|
|
- Automatic log dropping under extreme load with tracking |