Files

3.2 KiB

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), 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

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.