A reusable C++11 logging library demonstrating Encapsulation, Inheritance, Polymorphism, Abstraction, Composition.
- 6 levels:
TRACE, DEBUG, INFO, WARNING, ERROR, FATAL - Multiple outputs: console + file
- Timestamped records (
YYYY-MM-DD HH:MM:SS) - Configurable threshold filtering
- Extensible formatter/handler design
┌─────────────────────────────────────┐
│ Application Code (Your App) │
└──────────────┬──────────────────────┘
│ uses
↓
┌─────────────────────────────────────┐
│ Logger (Core Coordinator) │ ← Composition
└──────────────┬──────────────────────┘
│ delegates to
┌───────┴────────┐
↓ ↓
┌─────────────┐ ┌──────────────┐
│ Formatter │ │ Log Handlers │ ← Polymorphism
│ (Strategy) │ │ (Outputs) │
└─────────────┘ └──────┬───────┘
│
┌────────────┴────────────┐
↓ ↓
┌─────────────┐ ┌─────────────┐
│ Console │ │ File │
│ Handler │ │ Handler │
└─────────────┘ └─────────────┘
- Encapsulation: internal file/stream state hidden inside handlers
- Inheritance:
ConsoleHandler/FileHandlerderive fromLogHandler - Polymorphism: shared
write()interface for all handlers - Abstraction:
FormatterandLogHandlerare abstract interfaces - Composition:
Loggerowns formatter + list of handlers
#include "Logger.h"
#include "SimpleFormatter.h"
#include "ConsoleHandler.h"
#include "FileHandler.h"
int main() {
SimpleFormatter fmt;
Logger logger(LogLevel::INFO, &fmt);
ConsoleHandler console;
FileHandler file("logs/app.log");
logger.addHandler(&console);
logger.addHandler(&file);
logger.info("Application started");
logger.error("Something went wrong");
return 0;
}g++ -std=c++11 -I include main.cpp src/*.cpp -o logging_demo.exeg++ -std=c++11 -I include main.cpp src/*.cpp -o logging_demo
./logging_demoinclude/: LogLevel, LogRecord, Formatter, SimpleFormatter, LogHandler, ConsoleHandler, FileHandler, Logger
src/: LogRecord.cpp, SimpleFormatter.cpp, ConsoleHandler.cpp, FileHandler.cpp, Logger.cpp
main.cpp: demo app
logs/: runtime log output
Logger(LogLevel level, Formatter* fmt)addHandler(LogHandler* handler)log(level, message)+trace/debug/info/warning/error/fatal
- C++11 compatible (GCC/Clang/MSVC)
- Easy to extend with JSON formatter, rotating file handler, async logging, thread safety