Logger: Add structured logging support (Phase 2 of #4084)#4635
Open
scr-oath wants to merge 4 commits intoprebid:masterfrom
Open
Logger: Add structured logging support (Phase 2 of #4084)#4635scr-oath wants to merge 4 commits intoprebid:masterfrom
scr-oath wants to merge 4 commits intoprebid:masterfrom
Conversation
…turedLogger interfaces (prebid#4084 Phase 2) This PR implements phase 2 of issue prebid#4084, adding structured logging support to the logger package while maintaining full backward compatibility. Changes: - Split Logger interface into FormattedLogger and StructuredLogger - FormattedLogger: Traditional printf-style methods (Debugf, Infof, etc.) - StructuredLogger: slog-style methods with context support (Debug, DebugContext, Info, InfoContext, etc.) - Logger interface embeds both for complete logging functionality - Enhanced GlogLogger implementation: - Implements both FormattedLogger and StructuredLogger interfaces - Uses searKing/golang/go/log/slog NewGlogHandler to bridge slog to glog - Maintains backward compatibility - struct name unchanged - Added Fatal level support: - Defined LevelFatal constant as slog.LevelError + 4 - Implemented Fatal and FatalContext methods - Comprehensive test coverage: - Tests for all StructuredLogger methods - Tests for context propagation - Tests verifying both logging styles work together - All existing tests continue to pass Backward Compatibility: ✅ GlogLogger struct name unchanged ✅ NewGlogLogger() signature unchanged ✅ Logger interface preserves all existing methods ✅ Package-level functions (Debugf, Infof, etc.) unchanged ✅ No changes required in calling code Dependencies: - Added github.com/searKing/golang/go v1.2.138 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
- Added exitFunc field to GlogLogger (defaults to os.Exit) - Made exit behavior injectable for testing - Added 3 new tests verifying Fatal and FatalContext call exit(1) - All 62 tests pass The tests verify: 1. Fatal calls the exit function with code 1 2. FatalContext calls the exit function with code 1 3. FatalContext works with custom context values
- Customize GlogHandler's ReplaceLevelString to map LevelFatal to 'F' - Fatal logs now show F20251211... instead of E20251211... - Maintains traditional glog format: D/I/W/E/F prefixes for all levels - All 62 tests pass Thanks to golang-pro agent for finding the ReplaceLevelString field!
…ogic - Store the default level-to-prefix mapping function - Only override Fatal level (>= LevelFatal), delegate rest to default - Cleaner, more maintainable - no duplication of D/I/W/E logic - All 62 tests still pass
Collaborator
|
@postindustria-code can you please review? |
postindustria-code
approved these changes
Feb 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR implements phase 2 of #4084, adding structured logging support to the logger package while maintaining full backward compatibility.
This is a followup to #4085. cc @justadreamer
Changes
Interface Hierarchy
Loggerinterface intoFormattedLoggerandStructuredLoggerDebugf,Infof,Warnf,Errorf,Fatalf)Debug,DebugContext,Info,InfoContext,Warn,WarnContext,Error,ErrorContext,Fatal,FatalContext)Enhanced GlogLogger Implementation
FormattedLoggerandStructuredLoggerinterfacesgithub.com/searKing/golang/go/log/slogNewGlogHandler to bridge slog to glogFatal Level Support
LevelFatalconstant asslog.LevelError + 4FatalandFatalContextmethods that log and terminateTesting
Backward Compatibility
✅ Fully backward compatible:
GlogLoggerstruct name unchangedNewGlogLogger()signature unchangedLoggerinterface preserves all existing methodsDebugf,Infof, etc.) unchangedDependencies
github.com/searKing/golang/go v1.2.138Related Issues
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 (1M context) noreply@anthropic.com