All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.10.0 - 2025-10-04
-
Sentry Error Tracking Adapter - Enterprise-grade error monitoring integration (#63)
- Automatic error capture with stack traces and breadcrumbs
- Transaction tracking for distributed tracing
- 7 sampling strategies: fixed, adaptive, priority, burst detection, group-based, profiles, and custom
- Retry logic with exponential backoff for network resilience
- Real-time metrics and observability with atomic counters
- Message template interpolation in Sentry UI
- Performance optimized: stack trace caching (60.74 ns/op), retry calculation (11.07 ns/op)
- Separate module at
github.com/willibrandon/mtlog/adapters/sentry
-
Context Deadline Awareness - Automatic timeout warnings (#48)
- Automatically detects and warns when operations approach context deadlines
- Configurable warning threshold (e.g., warn when <100ms remaining)
- Adds properties:
DeadlineRemaining,DeadlineAt,DeadlineApproaching - Optionally upgrades log level (Info → Warning) when deadline is near
- Zero-cost when context has no deadline
- Perfect for HTTP handlers, database operations, and microservice calls
-
Per-Message Sampling - Adaptive log volume control (#61)
- Multiple sampling strategies: counter-based, rate-based, time-based, first-N, group-based, conditional, exponential backoff
- Adaptive sampling automatically adjusts rate to maintain target events/second
- Oscillation prevention with hysteresis threshold and dampening factor
- Profile versioning with semantic versioning and migration policies
- Thread-safe, immutable profile registry with freeze capability
- Performance: 17ns for simple sampling decisions, 209ns with properties
- Fluent configuration API with predefined dampening presets
-
Conditional and Router Sinks - Advanced event routing (#60)
- Zero-overhead conditional routing (3.7ns when predicate returns false)
- Flexible routing modes: FirstMatch (exclusive) and AllMatch (broadcast)
- Production resilience: circuit breakers, health checks, fallback sinks
- Enterprise monitoring: Prometheus metrics, Grafana dashboards
- Runtime management: add/remove routes and groups dynamically
- 11 documented routing patterns for real-world scenarios
- JSON configuration support via existing configuration builder
-
HTTP Middleware - Multi-framework request/response logging (#59)
- Support for net/http, Gin, Echo, Fiber, and Chi frameworks
- Request/response logging with configurable fields and timing
- Request ID generation and propagation with multiple header support
- Context injection for nested logging with helper methods
- Configurable log levels based on HTTP status codes
- Advanced sampling strategies: rate-based, adaptive, path-based, composite
- Object pooling for zero-allocation paths (~2.3μs per request overhead)
- Distributed tracing support (W3C Trace Context, B3, X-Ray)
- Panic recovery with detailed stack traces
- Separate module at
github.com/willibrandon/mtlog/adapters/middleware
-
RenderMessage() Method - Public API for rendering message templates (#64)
- New
RenderMessage()method oncore.LogEventfor custom sinks - Properly handles capturing operators (
{@Property}), scalar hints ({$Property}), and format specifiers ({Property:format}) - Enables custom sinks to render message templates without accessing internal parser
- Returns the original template as fallback if parsing fails
- Example:
message := event.RenderMessage()renders the template with all properties
- New
-
Zed Extension - Full editor support via Language Server Protocol (#56)
- New
mtlog-lspcommand providing LSP wrapper for mtlog-analyzer - Native Zed extension using Rust/WASM (wasm32-wasip2 target)
- Real-time diagnostics for all MTLOG001-MTLOG013 issues
- Code actions with quick fixes for common problems
- Automatic binary detection in standard Go paths
- Configurable analyzer flags and custom paths
- Proper UTF-16 code unit handling for accurate text positioning
- Comprehensive CI/CD integration with GitHub Actions
- New
0.9.0 - 2025-08-19
-
Core Library
-
With()method for structured field logging (#42, #55)- Adds key-value pairs to log events:
logger.With("service", "api", "version", "1.0") - Chainable for building context:
logger.With("env", "prod").With("region", "us-west") - Performance optimized: 0 allocations when no fields, 2 allocations for ≤64 fields
- Maintains structured properties for Serilog compatibility
- Comprehensive analyzer diagnostics (MTLOG009-MTLOG013) for common mistakes
- Adds key-value pairs to log events:
-
OpenTelemetry (OTEL) Adapter - Full integration with OpenTelemetry ecosystem
- OTLP exporter with gRPC and HTTP transports
- Adaptive sampling based on trace decisions
- Automatic trace/span context correlation
- Resource detection (process, OS, runtime)
- Configurable batching and retry logic
- TLS support with automatic detection
- Comprehensive integration tests with real OTEL collector
-
Modern Serilog Alignment - Enhanced formatting capabilities (#37)
- New
:jformat specifier for JSON output:{Data:j}renders any value as JSON - New
:qformat specifier to explicitly quote strings:{Name:q}→"Alice" - New
:lformat specifier for literal string output (no escaping) - Numeric property indexing:
{0},{1}for positional arguments (like .NET string.Format) - Structs render in Go style:
{Field1:value1 Field2:value2} - Improved nil handling with
Null{}sentinel type - Smart byte slice handling (UTF-8 string vs byte array)
- New
-
Template Cache Security Fix - LRU cache with bounded size (#39)
- Prevents memory exhaustion from unbounded template generation
- Configurable cache size (default: 10,000 entries)
- Sharded design for concurrent access (up to 64 shards)
- O(1) operations with proper LRU eviction
- Optional TTL support for time-based expiration
-
-
mtlog-analyzer Static Analysis Tool
- With() Method Diagnostics (MTLOG009-MTLOG013)
- MTLOG009: Empty With() calls
- MTLOG010: Duplicate properties in With()
- MTLOG011: With() called on nil logger
- MTLOG012: Invalid property count (odd number of arguments)
- MTLOG013: Non-string property names
- Suppression support via comments for all With() diagnostics
- With() Method Diagnostics (MTLOG009-MTLOG013)
-
IDE Extensions
-
VS Code Extension - Support for With() method diagnostics
- Real-time validation of With() method usage
- Quick fixes for common With() issues
- Updated to handle all new MTLOG009-MTLOG013 diagnostics
-
GoLand Plugin - Support for With() method diagnostics
- Full integration of With() method analysis
- Quick fixes and intention actions for With() issues
- Comprehensive test coverage for new diagnostics
-
Neovim Plugin - Enhanced reliability and With() diagnostics
- Support for MTLOG009-MTLOG013 diagnostics
- Improved test file creation in Go module context
- Better fix descriptions in MtlogQuickFix menu
- Comprehensive real-world testing framework
-
- Added comprehensive With() method examples and documentation
- Created OpenTelemetry adapter documentation with integration examples
- Updated README with new format specifiers and numeric indexing examples
- Added static analysis section covering With() diagnostics
0.8.1 - 2025-08-10
- Neovim Plugin - Fixed commands not loading with lazy.nvim and other plugin managers
- Renamed
plugin/mtlog.luatoplugin/mtlog.vimand wrapped Lua code in vim heredoc - This ensures proper command registration regardless of plugin manager or loading strategy
- Commands are now available immediately after plugin installation without manual setup
- Renamed
0.8.0 - 2025-08-10
- Neovim Plugin - Comprehensive plugin for mtlog-analyzer integration (#31)
- Real-time analysis with debouncing and smart activation
- LSP integration providing code actions through standard interface
- Queue management for concurrent analysis with pause/resume
- Context rules for auto-enable/disable based on patterns
- Diagnostic suppression at session and workspace levels
- Interactive help system with
:MtlogHelpand:MtlogExplain - Telescope integration for fuzzy finding
- Statusline component with diagnostic counts
- 30+ test files with comprehensive coverage
- Requires Neovim >= 0.8.0
0.7.7 - 2025-08-08
-
Analyzer - MTLOG002 quick fixes for invalid format specifiers (#29)
- Automatically suggests valid format specifiers based on common mistakes
- Handles .NET-style format strings (e.g., "d3" → "000", "f2" → "F2")
- Supports all mtlog format types: numeric, float, percentage, exponential, hexadecimal
- Available in strict mode for comprehensive format validation
-
Analyzer - MTLOG005 enhanced capturing hints with LogValue() stub generation (#30)
- Dual quick fixes: add @ prefix OR generate LogValue() method stub
- Smart detection of sensitive fields (passwords, tokens, API keys, etc.)
- Generated stubs include TODO comments for sensitive fields
- Helps implement safe logging for complex types with sensitive data
-
VS Code Extension - Format specifier and LogValue() quick fixes
- Full support for MTLOG002 format specifier corrections
- LogValue() method stub generation for complex types
- Seamless integration with analyzer's suggested fixes
-
GoLand Plugin - Format specifier and LogValue() quick fixes
- Comprehensive support for MTLOG002 suggested fixes
- LogValue() stub generation with sensitive field detection
- Full test coverage for all new quick fix scenarios
-
Analyzer - Refactored codebase into focused, single-responsibility modules (#28)
- Separated type checking, string conversion, and context key logic
- Improved maintainability with clearer separation of concerns
- Enhanced testability through modular design
-
VS Code Extension - Modularized codebase and updated dependencies
- Cleaner separation of analyzer, diagnostics, and code action modules
- Updated all dependencies to latest versions
- Improved error handling and logging
-
Analyzer - Improved error handling in test flag restoration
- Proper handling of Set() error returns in test cleanup
- More robust test framework flag management
-
Documentation - Enhanced IDE extension badges for better visibility
- Improved contrast for both light and dark mode compatibility
- Clearer visual indicators in marketplace listings
0.7.6 - 2025-08-07
-
Analyzer - MTLOG007 quick fix for extracting repeated string literals to constants
- Detects when context keys (e.g., "user_id", "request_id") are used multiple times
- Generates appropriately named constants following Go naming conventions
- Intelligently handles acronyms (ID, URL, API, etc.) in constant names
- Finds optimal insertion position for const declarations
-
VS Code Extension - String-to-constant quick fix support
- Automatically applies MTLOG007 suggested fixes from analyzer
- Replaces all occurrences of the string literal with the new constant
-
GoLand Plugin - String-to-constant quick fix support
- Full support for MTLOG007 suggested fixes
- Comprehensive test coverage with 10 different scenarios
-
Analyzer - MTLOG001 TODO comment placement for existing inline comments
- Now places TODO on next line when there's already a comment on the same line
- Prevents double comments and maintains better code readability
-
CI/CD - GoLand plugin tests now properly fail the CI pipeline
- Removed
|| truethat was hiding test failures - Builds analyzer from source instead of using @latest for accurate testing
- Removed
0.7.5 - 2025-08-06
- GoLand Plugin - Fixed @ApiStatus.OverrideOnly violation flagged by JetBrains verification
- Extracted installation logic to static companion method to avoid direct actionPerformed invocation
- Maintains full functionality while complying with IntelliJ Platform API requirements
0.7.4 - 2025-08-06
- IDE Installation UX - Smart analyzer detection and auto-install prompts (#22)
-
VS Code Extension
- Auto-detection in standard Go locations (
$GOBIN,$GOPATH/bin,~/go/bin) - One-click installation prompt when analyzer not found
- Improved error messages with specific paths and solutions
- Automatic path caching for performance
- Auto-detection in standard Go locations (
-
GoLand Plugin
- Smart path detection following Go's installation precedence
- Notification with Install/Settings actions when analyzer not found
- Support for platform-specific locations (Windows Apps, /usr/local/go/bin)
- findAnalyzerPath() made internal for testing
-
- Build - Fixed invalid Go version format in go.mod (changed from
1.23.0to1.23) - VS Code Extension - Added test binaries to .vscodeignore to reduce package size
0.7.3 - 2025-08-05
- Analyzer Architecture - Centralized all quick fixes in the analyzer with stdin support (#21)
- IDE extensions now use analyzer-provided suggested fixes exclusively
- Transitioned from file-based to stdin-based communication for real-time analysis
- Removed ~1000 lines of duplicate quick fix code from IDE extensions
- Replaced os.ReadFile with AST-based analysis for better performance
- Analyzer Quick Fixes - Suggested fixes for MTLOG001 (template/argument mismatch) and MTLOG006 (missing error parameter)
- MTLOG006 intelligently detects error variables in scope
- Adds appropriate error variable or
nilwith TODO comment
- Performance - Eliminated repeated file I/O operations in both IDE extensions
- Stability - Fixed potential issues with stdin mode where files may not exist on disk
- Code Quality - Fixed analyzer tautological conditions and redundant control flow
- GoLand Plugin - Fixed IntelliJ IDEA Ultimate compatibility issue where plugin showed as "binary incompatible"
0.7.2 - 2025-08-04
- Diagnostic Kill Switch - Quick disable/enable for all mtlog diagnostics in IDE extensions (#19)
-
VS Code Extension
- Command palette commands: "Toggle mtlog Diagnostics"
- Clickable status bar item showing analyzer state and diagnostic counts
- Diagnostic suppression with persistent workspace settings
- Quick action to suppress specific diagnostic types
- Keyboard shortcut: Ctrl+Alt+M (Cmd+Alt+M on Mac)
- Suppression manager for managing suppressed diagnostics
-
GoLand Plugin
- Status bar widget with visual state indicator (play/pause icons)
- Notification bar on startup with Disable/Settings actions
- Diagnostic suppression with immediate UI updates
- Intention actions and quick fixes for suppressing diagnostics
- Manage suppressed diagnostics dialog
- Persistent state across IDE restarts
-
- GoLand Plugin - Fixed critical deadlock in template argument quick fix during preview generation
- Both Extensions - Suppressed diagnostics now disappear immediately without requiring file edits
- GoLand Plugin - Inspection now enabled by default for better user experience
0.7.1 - 2025-08-03
-
VS Code Extension - Prevent stale diagnostics from persisting after code fixes (#15)
- Removed broken cache mechanism causing outdated error messages
- Added version tracking to prevent race conditions
- Diagnostics now properly clear when issues are resolved
-
GoLand Plugin - Replace deprecated ProcessAdapter with ProcessListener for IntelliJ Platform 2024.2+ compatibility (#17)
0.7.0 - 2025-08-03
-
VS Code Quick Fixes - Enhanced VS Code extension with quick fixes for mtlog diagnostics (#11)
- PascalCase property name conversion (e.g.,
user_id→UserId) - Template/argument mismatch resolution (add/remove arguments)
- Automatic save and reanalysis after applying fixes
- Fixed parseDiagnostic for modern go vet JSON output formats
- Quick fixes now work identically to the GoLand plugin implementation
- PascalCase property name conversion (e.g.,
-
GoLand Plugin - Real-time validation for mtlog message templates in JetBrains IDEs (#9)
- Automatic template/argument validation with intelligent highlighting
- Quick fixes for property naming (PascalCase) and argument count mismatches
- Three severity levels with configurable mappings
- Performance optimized with caching and debouncing
- Configurable analyzer path and flags via settings
- Support for Windows, macOS, and Linux
- Published to JetBrains Marketplace under plugin ID "com.mtlog.analyzer"
- Full integration tests with real mtlog-analyzer
-
VS Code Extension - Real-time validation for mtlog message templates (#7)
- Automatic diagnostics on save and file changes with 500ms debounce
- Three severity levels: errors (red), warnings (yellow), suggestions (blue)
- Status bar indicator showing analysis state and issue count
- SHA-256 based caching to skip redundant analysis
- CPU-based concurrency control (uses half of logical cores)
- Automatic installation prompt when mtlog-analyzer not found
- Configurable analyzer path and flags via settings
- Published to VS Code Marketplace under publisher ID "mtlog"
- Unified Release Process - All components now release together
- Single
v*tag releases library, binaries, and both IDE extensions - Removed
ext/v*dual-tagging strategy for simplicity - VS Code and GoLand extensions publish to their marketplaces automatically
- Single
0.6.0 - 2025-07-30
- OTEL Compatibility - Support for dots in property names (#4)
- Enable OpenTelemetry-style property names like
{http.method},{service.name},{db.system} - Validation prevents properties that are only dots (e.g.,
{.},{..}) - Analyzer updated to skip PascalCase suggestions for dotted properties
- Works with all features: format specifiers, capturing hints, Go template syntax
- Example:
log.Information("HTTP {http.method} to {http.url} took {http.duration.ms:F2}ms", "GET", "/api", 123.45)
- Enable OpenTelemetry-style property names like
-
BREAKING: New Output Template Syntax -
${...}for built-in elements (#6)- Output templates now use
${...}syntax for built-in elements to prevent ambiguity - Built-in elements:
${Timestamp},${Level},${Message},${Exception},${NewLine},${Properties} - User properties continue to use
{...}syntax:{UserId},{RequestId}, etc. - Prevents conflicts when logging properties with names like "Message" or "Level"
- Example:
mtlog.WithConsoleTemplate("[${Timestamp:HH:mm:ss} ${Level:u3}] {SourceContext}: ${Message}") - All format specifiers work with the new syntax:
${Timestamp:yyyy-MM-dd},${Level:u3} - Migration required: Update all output templates in your configuration and code
- Output templates now use
-
BREAKING: Renamed 'destructuring' to 'capturing' (#5)
Destructurerinterface →CapturerinterfaceTryDestructuremethod →TryCapturemethodWithDestructuring()→WithCapturing()internal/destructure/→internal/capture/examples/destructuring/→examples/capturing/- All documentation and analyzer messages updated
- This better reflects the operation: capturing structured data from objects
- Migration required: Update all references in your code
0.5.0 - 2025-07-29
-
SelfLog - Internal diagnostics facility for debugging silent failures
- Zero-cost when disabled with single atomic pointer check
- Flexible output to any
io.Writeror custom function - Thread-safe with
Sync()wrapper for concurrent writes - Environment variable support (
MTLOG_SELFLOG=stderr/stdout/file) - Structured output format:
{timestamp} [{component}] {message} IsEnabled()guard to avoid formatting costs when disabled- Performance: 0.37ns/op when disabled (with guard), 148ns/op to io.Discard
-
Comprehensive SelfLog Instrumentation
- All sinks report write/emit failures with contextual information
- Async sink: buffer overflow, worker panics, dropped event counts
- Durable sink: persistence failures, buffer corruption
- Network sinks (Seq, Elasticsearch, Splunk): connection errors, HTTP failures
- File/Rolling sinks: permission errors, disk space issues
- Template validation: unclosed properties, empty names, invalid syntax
- Capturing: panic recovery with type information
- Configuration: unknown types, parse failures, type mismatches
-
Idempotent Close Methods
- ElasticsearchSink, SeqSink, and SplunkSink now use
sync.Oncefor safe multiple calls - Prevents double-close panics in complex shutdown scenarios
- ElasticsearchSink, SeqSink, and SplunkSink now use
-
Template Validation
- Runtime validation via
parser.ValidateTemplate() - Detects unclosed properties, empty property names, spaces in names
- Validation errors logged through selflog for debugging
- Runtime validation via
- Added comprehensive troubleshooting guide (
docs/troubleshooting.md) - SelfLog usage examples for debugging common issues
- Custom sink implementation guidance with selflog integration
- Performance troubleshooting tips and profiling guidance
- Added selflog tests for all instrumented components (241 total tests)
- Race condition tests for concurrent selflog usage
- Benchmarks confirming performance targets
- Cross-platform compatibility (Windows path handling)
0.4.0 - 2025-07-29
- Dependency Management
- Moved benchmarks to separate module (
benchmarks/) to isolate zap and zerolog dependencies - Moved logr integration to separate module (
adapters/logr/) to avoid forcing go-logr dependency - Users no longer need to download benchmark-only dependencies when using mtlog
- Fixed zero-allocation benchmarks by implementing
EmitSimplein benchmark discardSink - Main module now has zero external dependencies
- Moved benchmarks to separate module (
- logr Integration
mtlog.NewLogrLogger()has been moved to the separategit.832008.xyz/willibrandon/mtlog/adapters/logrmodule- Import the adapter module and use
mtlogr.NewLogger()instead - Example migration:
// Before: logrLogger := mtlog.NewLogrLogger(...) // After: import mtlogr "github.com/willibrandon/mtlog/adapters/logr" logrLogger := mtlogr.NewLogger(...)
- Added comprehensive Go documentation for the logr adapter module
- Updated README, website, and examples to reflect the new import path
- Added CI/CD support for testing adapter modules
0.3.0 - 2025-07-28
-
ForType - Type-based logging with automatic SourceContext
ForType[T]()function for automatic SourceContext extraction from Go types using reflectionTypeNameOptionsstruct for customizable type name formatting (package inclusion, depth, prefix/suffix)ExtractTypeName[T]()for custom logger creation with type-based naming- Thread-safe LRU cache with configurable size limits via
MTLOG_TYPE_NAME_CACHE_SIZEenvironment variable (default: 10,000 entries) - Multi-tenant support with
ForTypeWithCacheKey()andExtractTypeNameWithCacheKey()for separate cache namespaces - Performance: ~213ns/op uncached, ~148ns/op cached with ~1.4x speedup from caching
- Robust generic type handling including deeply nested generics, multiple type parameters, and complex built-in combinations
- Cache statistics with hits, misses, evictions, hit ratio, current size, and max size monitoring
SimplifyAnonymousoption for cleaner anonymous struct namesWarnOnUnknownoption for debugging interface types and unresolvable types- Comprehensive test coverage (150+ tests) including edge cases, concurrency, and complex generics
- Complete documentation with multi-tenant examples and cache configuration
-
LogContext - Scoped property propagation through context
PushProperty()function for attaching properties to context that automatically flow through all log events- Thread-safe immutable implementation with property copying for concurrent access
- Property inheritance through context hierarchy with proper precedence handling
- Property precedence: event-specific > ForContext > LogContext > standard context values
LogContextEnricherintegration with existing enrichment pipeline- Comprehensive test coverage including edge cases, inheritance, and integration scenarios
- Performance benchmarks showing reasonable overhead (3.3x for single property, 4.2x for multiple properties)
- Deep nesting support (10+ levels) with predictable performance characteristics
- Complete documentation with examples and real-world usage patterns
- Working example demonstrating web service request tracing
-
mtlog-analyzer - Static analysis tool for mtlog usage
- Detects template/argument mismatches
- Validates format specifiers
- Suggests property naming conventions (PascalCase)
- Detects duplicate properties
- Suggests capturing hints for complex types
- Validates error logging patterns
- Suggests constants for common context keys
- Configuration flags:
-strict,-common-keys,-disable,-ignore-dynamic-templates,-strict-logger-types,-downgrade-errors - IDE integration with automatic fixes
- Can be used standalone or as a go vet tool
- Comprehensive test coverage (88.6%)
0.2.1 - 2025-07-27
- Internal Organization
- Moved implementation packages (capture, enrichers, filters, formatters, parser, handler) to
internal/directory - Public API remains unchanged - all user-facing packages and interfaces are unaffected
- Moved implementation packages (capture, enrichers, filters, formatters, parser, handler) to
- CI/CD
- Updated GitHub Actions fuzz test paths to use new internal package locations
- Fixed Splunk integration tests by properly exposing management port 8089
- Updated Splunk test configuration to use non-default password for remote login
- Increased dynamic level filtering performance threshold to 150ns to account for OS variance
- Updated testing documentation to reflect actual Splunk requirements
0.2.0 - 2025-07-27
-
Output Templates
- Serilog-style output templates with customizable formatting
- Support for timestamp, level, message, and property formatting
- Format specifiers for timestamps (HH:mm:ss, yyyy-MM-dd), levels (u3, u, l), and numbers (F2, P1, 000)
- Go template syntax support (
{{.Property}}) alongside traditional{Property}syntax - Template analysis for performance optimization
-
Console Themes
- New Literate theme with ANSI 256-color support for beautiful, readable output
- Enhanced color selection algorithms for better visual hierarchy
- Automatic terminal capability detection with fallback modes
- Environment variable support for color control (MTLOG_FORCE_COLOR)
-
Source Context Enrichment
- Automatic source context detection from call stack
- LRU cache with configurable size via MTLOG_SOURCE_CTX_CACHE environment variable
- Intelligent filtering of mtlog internal packages
-
API Improvements
- New
Build()function for error-safe logger initialization - Better error propagation in template parsing
- Simplified API by removing redundant helper functions
- New
-
Testing & Quality
- Comprehensive fuzz tests for output template parser
- Fuzz tests for message template parser enhancements
- CI integration for automated fuzz testing
-
Performance
- Updated benchmarks to reflect current performance (17.3 ns/op for simple logging)
- Optimized Windows VT terminal processing to avoid redundant syscalls
- Template parsing occurs once at initialization for better performance
-
Console Output
- Improved bracket and status code rendering in console themes
- Better handling of dimmed text for readability
- Enhanced Windows terminal support with VT100 processing
- Template parsing errors are now properly propagated instead of being silently ignored
- Windows console flicker eliminated by checking VT processing state before enabling
- Source context cache now properly bounded with LRU eviction
- All golangci-lint issues resolved for clean CI builds
0.1.0 - 2025-7-23
-
Core Features
- Zero-allocation logging for simple messages (13.6 ns/op)
- Message templates with positional property extraction and format specifiers
- Pipeline architecture for clean separation of concerns
- Type-safe generics for better compile-time safety
- LogValue interface for safe logging of sensitive data
- Short method names (Info/Warn) alongside full names for idiomatic Go usage
- slog.Handler adapter for Go 1.21+ compatibility
- logr.LogSink adapter for Kubernetes ecosystem compatibility
- Fuzz testing for message template parser
- Race condition tests for async and durable sinks
- Comprehensive benchmarks for typical real-world scenarios
-
Sinks & Output
- Console sink with customizable themes (dark, light, ANSI colors)
- File sink with rolling policies (size, time-based)
- Seq integration with CLEF format and dynamic level control
- Elasticsearch sink for centralized log storage and search
- Splunk sink with HEC (HTTP Event Collector) support
- Async sink wrapper for high-throughput scenarios
- Durable buffering with persistent storage for reliability (now with configurable channel buffer size)
-
Pipeline Components
- Rich enrichment with built-in and custom enrichers
- Advanced filtering including rate limiting and sampling
- Type-safe capturing with caching for performance
- Dynamic level control with runtime adjustments
- Configuration from JSON for flexible deployment
-
Performance
- 8.7x faster than zap for simple string logging
- Zero allocations for trivial logging path
- Comprehensive benchmarks against zap and zerolog
- Removed hardcoded test tokens from integration tests
- Added proper environment variable requirements for sensitive data