Skip to content

Conversation

@scr-oath
Copy link
Contributor

@scr-oath scr-oath commented Dec 12, 2025

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

  • Split Logger interface into FormattedLogger and StructuredLogger
    • FormattedLogger: Traditional printf-style methods (Debugf, Infof, Warnf, Errorf, Fatalf)
    • StructuredLogger: slog-style methods with context support (Debug, DebugContext, Info, InfoContext, Warn, WarnContext, Error, ErrorContext, Fatal, FatalContext)
    • Logger interface embeds both for complete logging functionality

Enhanced GlogLogger Implementation

  • Implements both FormattedLogger and StructuredLogger interfaces
  • Uses github.com/searKing/golang/go/log/slog NewGlogHandler to bridge slog to glog
  • Maintains backward compatibility - struct name unchanged

Fatal Level Support

  • Defined LevelFatal constant as slog.LevelError + 4
  • Implemented Fatal and FatalContext methods that log and terminate

Testing

  • ✅ Comprehensive test coverage for all StructuredLogger methods
  • ✅ Tests for context propagation
  • ✅ Tests verifying both logging styles work together
  • ✅ All 59 tests pass

Backward Compatibility

Fully backward compatible:

  • 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

Related Issues

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.5 (1M context) noreply@anthropic.com

…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants