92 lines
3.2 KiB
Markdown
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).
|