Een productie-waardige, streaming log analyse engine gebouwd met modern C++20 en een verbluffende Glassmorphism ImGui frontend. Ontworpen voor hoge doorvoer, lage latency en een premium gebruikerservaring.
Dit project dient als een Core Infrastructure Portfolio Piece, en demonstreert:
- Zero-Copy Architectuur: Uitgebreid gebruik van
std::string_viewom heap allocaties te minimaliseren. - Streaming Pipeline: Verwerkt logs regel-voor-regel met
O(1)geheugen, ongeacht de bestandsgrootte. - Async Indexing: Achtergrond threading voor 10GB+ bestanden zonder UI freeze.
- Configureerbare Parsing: Regex-based pattern matching voor elk willekeurig logformaat.
- State-of-the-Art UI: Een volledig op maat gemaakte OpenGL renderer met Glassmorphism, animaties en responsieve interacties.
- Moderne Tooling: C++20 features (Concepts, Format), Catch2 v3 voor testing, en CMake build systeem.
- High-Performance Parsing: Custom parser verwerkt ~2 miljoen regels/sec.
- Configureerbare Parser:
PatternLogParsermet regex-based custom formats (bijv.[%D %T] [%L] %M). - Advanced Memory Management:
MemoryMappedFilevoor razendsnelle I/O zonder buffers te kopiΓ«ren. - Async Indexing: Dedicated worker thread voor line offset berekening (10GB+ support).
- Smart Memory Allocation: Pre-allocatie gebaseerd op
fileSize / 120heuristiek. - Pluggable Analyzers: Modulaire architectuur voor
LevelCount,KeywordSearchenTopErroranalyses.
- Zen Theme: Een rustgevende, geanimeerde achtergrond met subtiele parallax effecten.
- Polished Visuals:
- Glass Cards: Semi-transparante panelen met frosty borders.
- Vector Icons: Volledige integratie van Font Awesome 6.
- Gradient Charts: Prachtige datavisualisaties met kleurverlopen.
- Timeline & Heatmap: Interactieve visualisaties voor log patronen.
- Advanced Features:
- Log Viewer: Memory-mapped viewer met
ImGuiListClippervoor miljoenen regels. - Progress Indicators: Real-time voortgang tijdens async indexing.
- Parser Configuration: UI voor custom log format patterns.
- Log Viewer: Memory-mapped viewer met
- Window Management: Minimaliseren, inklappen en een slimme Fill Screen / Restore modus.
Verwerking van een gegenereerd logbestand met 1,000,000 regels (ongeveer 100MB):
| Metriek | Resultaat |
|---|---|
| Executietijd | 0.52s |
| Doorvoer | ~1.92M regels/sec |
| Geheugengebruik | < 10MB (constant) |
| Max File Size | 10GB+ (met async indexing) |
| Platform | macOS M1, Single Thread |
graph TD
CLI[CLI Frontend] --> APP[Application Layer]
GUI[GUI Frontend] --> APP
APP --> PIPELINE[Analysis Pipeline]
PIPELINE --> PARSER[ILogParser Interface]
PARSER --> STANDARD[StandardLogParser]
PARSER --> PATTERN[PatternLogParser]
PIPELINE --> IO[MemoryMappedFile]
PIPELINE --> ANALYZERS[Analyzer Collection]
GUI --> VIEWER[Async Log Viewer]
VIEWER --> INDEXER[Background Indexer Thread]
De parser engine gebruikt een Strategy Pattern met polymorfisme:
ILogParser: Pure virtual interface voor alle parsersStandardLogParser: Geoptimaliseerde parser voor standaard formatenPatternLogParser: Regex-based parser voor custom formats met tokens (%D,%T,%L,%M)
- C++20 compliant compiler (Clang 10+ / GCC 10+ / MSVC 19.28+)
- CMake (3.14+)
- GLFW (voor GUI)
- OpenGL 3.3+
# Clone
git clone https://github.com/parvenuprompting/log-analyzer.git
cd log-analyzer
# Configure & Build
mkdir build && cd build
cmake ..
make
# Run GUI
open log_analyzer_gui.app # macOS
# of
./log_analyzer_gui # Linux/Windows# Installeer vcpkg
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh
# Build met vcpkg
export VCPKG_ROOT=/path/to/vcpkg
mkdir build && cd build
cmake ..
makeDoor gebruik te maken van memory mapping, wordt het bestand direct in het virtuele geheugen geladen. std::string_view slice't hierin zonder ooit data te kopiΓ«ren. Dit resulteert in zero-copy parsing van disk tot analyse.
Voor bestanden van 10GB+ wordt de line offset berekening uitgevoerd in een dedicated worker thread:
- Main Thread: Rendert UI met progress indicator
- Worker Thread: Scant bestand voor
\ncharacters en bouwtlineOffsets_vector - Synchronisatie:
std::mutexvoor thread-safe swap van resultaten
De PatternLogParser converteert user-friendly tokens naar regex patterns:
Pattern: "[%D %T] [%L] %M"
Regex: "\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\] \[(\w+)\] (.*)"In plaats van standaard ImGui styles, gebruikt dit project een custom render loop met stb_image voor textures en shader-achtige logica voor de achtergrond animaties, wat bewijst dat C++ apps er net zo modern uit kunnen zien als web apps.
log-analyzer/
βββ core/ # Parsing engine & data structures
β βββ ILogParser.h
β βββ StandardLogParser.cpp
β βββ PatternLogParser.cpp
βββ analysis/ # Analysis pipeline & algorithms
βββ gui/ # ImGui frontend
β βββ GuiController.cpp
β βββ LogViewer.cpp
β βββ main_gui.cpp
βββ io/ # Memory-mapped file I/O
βββ resources/ # Assets (icons, backgrounds, fonts)
βββ tests/ # Catch2 unit tests
βββ vcpkg.json # Dependency manifest
# Run unit tests
cd build
./unit_tests
# Run specific test suite
./unit_tests "[Pattern]" # Test PatternLogParser
./unit_tests "[Parser]" # Test StandardLogParser- File input met browse functie
- Filters (Time Range, Keyword Search, Custom Parser)
- Analysis results met grafieken
- Timeline visualisatie (minute-by-minute)
- Heatmap (24x7 error density)
- Memory-mapped file viewing
- Async indexing met progress bar
- Syntax highlighting voor log levels
ImGuiListClippervoor miljoenen regels- Zero-copy rendering
In de GUI kun je custom log formats definiΓ«ren:
- Enable "Configurable Parser" checkbox
- Voer pattern in (bijv.
%T - %L - %M) - Ondersteunde tokens:
%D: Date (YYYY-MM-DD)%T: Time (HH:MM:SS)%L: Level (INFO, ERROR, WARNING)%M: Message (rest van de regel)
- vcpkg integratie voor dependency management
- Multi-platform CMake (Windows, Linux, macOS)
- GitHub Actions CI/CD pipeline
- Platform-specific optimalisaties
- Real-time log streaming
- Distributed log aggregation
- Machine learning anomaly detection
- Export naar JSON/CSV/PDF
TiΓ«ndo Welles
High-Performance C++ Portfolio Project
MIT License - zie LICENSE voor details
