Files

92 lines
3.2 KiB
Markdown

# 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 <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):
```cmake
set(CPM_SPDLOGConfig_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../spdlogConfig")
```
### Verwendung im Code
```cpp
#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`](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).