# SPDLOGConfig Eigenständiges, header-only CMake-Projekt zur Konfiguration von [spdlog](https://github.com/gabime/spdlog) aus einer JSON-Datei. Es ist die aus [RelixTransferAI](../README.md) extrahierte Logging-Konfiguration (Namespace `spdlogconfig`) und wird dort sowie in anderen Projekten über [CPM.cmake](https://github.com/cpm-cmake/CPM.cmake) eingebunden. ## Features - Komplette Logger-Definition über eine JSON-Datei: globale und logger-spezifische Patterns, Level, Sinks, async Logger (globaler und lokaler Thread-Pool, Overflow-Policies). - Sinks: `console_st/mt`, `color_console_st/mt`, `basic_file_st/mt`, `daily_file_st/mt`, `rotating_file_st/mt`, `null_sink_st/mt`, `syslog_st/mt` (POSIX), `msvc_sink_st/mt` (Windows), optional `kafka_*`/`mongo_*` falls `librdkafka`/`mongocxx` im Include-Pfad liegen. - Reload-Unterstützung: Level zur Laufzeit ändern, ohne Neustart (`setupFromReload()`). - `LevelManager` als Singleton zur Laufzeit-Verwaltung einzelner Logger-Level. - Installierbare CMake-Package (`find_package(SPDLOGConfig)`), CPM- und FetchContent-tauglich. ## Verwendung ### Einbindung über CPM ```cmake include(cmake/CPM.cmake) CPMAddPackage( NAME SPDLOGConfig GITHUB_REPOSITORY /SPDLOGConfig GIT_TAG v1.0.0 ) target_link_libraries(myTarget PRIVATE SPDLOGConfig::SPDLOGConfig) ``` Lokal entwickeltes Checkout statt GitHub-Release (Source-Override vor dem `CPMAddPackage`-Aufruf): ```cmake set(CPM_SPDLOGConfig_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../spdlogConfig") ``` ### Verwendung im Code ```cpp #include int main() { spdlogconfig::setupFrom("config/logging.json"); // spdlogconfig::setupFromReload(); // später: Konfiguration neu einlesen auto logger = spdlog::get("root"); logger->info("hello from SPDLOGConfig"); // Laufzeit-Level-Verwaltung: spdlogconfig::LevelManager::instance().setLoggerLevel("root", "debug"); } ``` Fehler beim Öffnen/Parsen der Konfiguration werden von `setupFrom()` aktuell **intern behandelt** (Ausgabe auf stdout/stderr, keine Propagation) — das ist Legacy-Verhalten aus der ursprünglichen RelixTransfer-Headerdatei. Der Typ `spdlogconfig::spdlogconfig_error` existiert trotzdem und wird intern für teilweise Fehlerkontexte verwendet; auf Propagation sollte sich in neuen Programmen nicht verlassen werden. ## Konfigurationsformat Ein vollständiges Beispiel liegt unter [`test/full.json`](test/full.json). Das Schema (`spdlog_conf_t`) wird mit [reflect-cpp](https://github.com/getml/reflect-cpp) deserialisiert; unbekannte Felder, fehlende optionale Felder und Default-Werte werden vom Framework behandelt. ## Abhängigkeiten | Paket | Version | Zweck | |----------------|---------|------------------------------| | spdlog | 1.17.0 | Logging (std::format-Modus) | | reflect-cpp | 0.24.0 | JSON-Deserialisierung | | doctest | 2.5.2 | Tests (nur test/) | ## Bauen und Testen Voraussetzung: CMake ≥ 3.21, Clang 20/21 (oder MSVC/MSYS2-Clang), Ninja oder Make. ```sh cmake --preset linux-clang-21-release cmake --build --preset linux-clang-21-release ctest --preset linux-clang-21-release ``` ## Lizenz Public Domain (Unlicense) — siehe [LICENSE](LICENSE).