Design Logging Framework
| Difficulty: Easy | Source: awesome-low-level-design |
Requirements
- Log levels: DEBUG, INFO, WARNING, ERROR, FATAL
- Messages include timestamp, level, content
- Multiple output destinations: console, file, database
- Configurable log level and output
- Thread-safe concurrent logging
- Extensible for new levels and destinations
Class Diagram

Classes, Interfaces and Enumerations
| Class/Interface | Description |
|---|---|
| LogLevel | Enum for log levels: DEBUG, INFO, WARNING, ERROR, FATAL |
| LogMessage | timestamp, level, message content |
| LogAppender | Interface for output destinations |
| ConsoleAppender | Concrete appender; writes log messages to console |
| FileAppender | Concrete appender; writes log messages to file |
| DatabaseAppender | Concrete appender; writes log messages to database |
| LoggerConfig | Holds active log level and appender |
| Logger | Singleton; core logging functionality |
Design Patterns Used
| Pattern | Application |
|---|---|
| Singleton | Logger has a single instance across the application |
| Strategy | LogAppender interface allows swapping output destinations at runtime |
| Open/Closed Principle | New appenders can be added without modifying existing code |
Code Implementations
| Language | Source Code |
|---|---|
| Java | View on GitHub |
| Python | View on GitHub |
| C++ | View on GitHub |
| C# | View on GitHub |
| Go | View on GitHub |