spdlog für C++: vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist spdlog und warum wird es benötigt?

\n\n

spdlog ist eine superschnelle, header-only Bibliothek für das Logging in C++, die unter der MIT-Lizenz vertrieben wird. Ihre Hauptfunktion ist die unglaubliche Leistung, die durch asynchrones Schreiben, minimale Speicherzuweisungen und die Nutzung moderner C++11/14/17-Funktionen erreicht wird. In Benchmarks ist spdlog oft 5-10 Mal schneller als Bibliotheken wie glog oder Boost.Log.

\n\n

Warum spdlog verwenden? In jeder nicht-trivialen C++-Anwendung ist Logging kein Luxus, sondern eine Notwendigkeit. Es hilft:

\n
    \n
  • Fehler zu debuggen in einer Produktionsumgebung, in der kein Debugger verfügbar ist.
  • \n
  • Den Programmablauf zu verfolgen (Tracing).
  • \n
  • Die Leistung zu analysieren (Zeitmessung von Codeabschnitten).
  • \n
  • Sicherheitsaudits durchzuführen (Erfassung von Anmeldeversuchen, Datenänderungen).
  • \n
\n\n

spdlog bietet ein flexibles System: Sie können Logs in die Konsole, in Dateien (auch mit Rotation nach Größe oder Zeit), in das Systemprotokoll (syslog), in eine Datenbank (über ODBC) oder sogar über das Netzwerk senden. Der asynchrone Modus wird unterstützt, der es ermöglicht, den Hauptthread der Anwendung beim Schreiben von Logs nicht zu blockieren.

\n\n

Installation von spdlog

\n\n

Im Gegensatz zu Python gibt es in C++ keinen einheitlichen Paketmanager, aber es gibt mehrere Standardmethoden zur Installation von spdlog.

\n\n

Methode 1: Header-only (für den Anfang empfohlen)

\n

Der einfachste Weg ist, die Header-Dateien herunterzuladen und einfach in Ihr Projekt einzubinden. Es ist keine Kompilierung erforderlich.

\n
    \n
  1. Laden Sie die neueste Version von GitHub herunter.
  2. \n
  3. Entpacken Sie das Archiv.
  4. \n
  5. Kopieren Sie den Ordner include/spdlog in Ihr Projekt.
  6. \n
  7. Verwenden Sie im Code #include "spdlog/spdlog.h".
  8. \n
\n\n

Methode 2: Über den Paketmanager vcpkg

\n

vcpkg ist ein beliebter Paketmanager für C++ von Microsoft.

\n
# Installation\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # oder bootstrap-vcpkg.bat unter Windows\n./vcpkg install spdlog\n\n# Integration mit Ihrem Build-System\n./vcpkg integrate install
\n\n

Methode 3: Über Conan

\n

Conan ist ein weiterer beliebter Paketmanager.

\n
# In der Datei conanfile.txt\n[requires]\nspdlog/1.12.0\n\n[generators]\ncmake_find_package\n\n# Installation\nconan install . --build=missing
\n\n

Methode 4: CMake FetchContent (moderner Ansatz)

\n

Wenn Sie CMake verwenden, können Sie die Bibliothek direkt aus dem Repository beziehen:

\n
include(FetchContent)\nFetchContent_Declare(\n  spdlog\n  GIT_REPOSITORY https://github.com/gabime/spdlog.git\n  GIT_TAG v1.12.0\n)\nFetchContent_MakeAvailable(spdlog)\n\n# In Ihrem target\ntarget_link_libraries(my_app PRIVATE spdlog::spdlog)
\n\n

Schnellstart mit einem Codebeispiel

\n\n

Lassen Sie uns ein einfaches Programm schreiben, das Logs verschiedener Ebenen in die Konsole und in eine Datei ausgibt.

\n\n
#include "spdlog/spdlog.h"\n#include "spdlog/sinks/basic_file_sink.h"\n#include <memory>\n\nint main() {\n    // 1. Logger für die Konsole erstellen (standardmäßig farbig)\n    auto console = spdlog::stdout_color_mt("console");\n\n    // 2. Logger für die Datei erstellen\n    auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n\n    // 3. Logging-Level festlegen (standardmäßig - trace)\n    spdlog::set_level(spdlog::level::trace);\n\n    // 4. Nachrichten verschiedener Ebenen schreiben\n    console->trace("Dies ist eine Trace-Nachricht (detaillierteste Ebene)");\n    console->debug("Debug: Wert der Variable x = {}", 42);\n    console->info("Programm erfolgreich gestartet");\n    console->warn("Warnung: Speicher wird knapp");\n    console->error("Fehler: Datei konnte nicht geöffnet werden");\n    console->critical("Krit                    

Empfehlungen