SPDLOGConfig
Eigenständiges, header-only CMake-Projekt zur Konfiguration von spdlog
aus einer JSON-Datei. Es ist die aus RelixTransferAI extrahierte Logging-Konfiguration
(Namespace spdlogconfig) und wird dort sowie in anderen Projekten
über 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), optionalkafka_*/mongo_*fallslibrdkafka/mongocxxim Include-Pfad liegen. - Reload-Unterstützung: Level zur Laufzeit ändern, ohne Neustart (
setupFromReload()). LevelManagerals Singleton zur Laufzeit-Verwaltung einzelner Logger-Level.- Installierbare CMake-Package (
find_package(SPDLOGConfig)), CPM- und FetchContent-tauglich.
Verwendung
Einbindung über CPM
include(cmake/CPM.cmake)
CPMAddPackage(
NAME SPDLOGConfig
GITHUB_REPOSITORY <user>/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):
set(CPM_SPDLOGConfig_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../spdlogConfig")
Verwendung im Code
#include <spdlogconfig/SPDLOGConfig.h>
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. Das Schema
(spdlog_conf_t) wird mit 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.
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.