Logging für C++: Die besten Bibliotheken und Lösungen

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

Logging für C++: Die besten Lösungen



Logging ist eine kritische Komponente jedes ernsthaften C++-Projekts. Es hilft, die Programmausführung zu verfolgen, Fehler zu finden, die Leistung zu analysieren und Benutzeraktionen zu auditieren. Im Gegensatz zu Python, wo das integrierte Modul logging der De-facto-Standard ist, gibt es in C++ keine einheitliche integrierte Lösung. Die Community hat jedoch mehrere leistungsstarke und flexible Bibliotheken entwickelt. In diesem Artikel betrachten wir die besten davon: spdlog, Google glog, Boost.Log und Easylogging++.



Kriterien für die Auswahl einer Logging-Bibliothek

Bevor wir zur Übersicht übergehen, ist es wichtig zu verstehen, worauf bei der Auswahl zu achten ist:

  • Leistung: Minimale Auswirkungen auf die Geschwindigkeit der Anwendung.
  • Flexibilität: Möglichkeit zur Anpassung von Formaten, Logging-Stufen (DEBUG, INFO, WARN, ERROR) und Ausgaben (Datei, Konsole, syslog).
  • Einfache Integration: Header-only-Bibliotheken sind für kleinere Projekte vorzuziehen.
  • Multithreading-Unterstützung: Thread-Sicherheit und asynchrones Schreiben.
  • Lizenz: Kompatibilität mit kommerziellen Projekten (MIT, Apache, Boost).


1. spdlog – die schnellste und modernste

spdlog ist eine Header-only-Bibliothek (optional kompilierbar), geschrieben in C++11/14/17. Sie gilt zu Recht als die beliebteste aufgrund ihrer blitzschnellen Geschwindigkeit und minimalen Speichernutzung. spdlog unterstützt asynchrones Logging, was besonders für hochlastige Systeme wichtig ist.

Hauptfunktionen:

  • Thread-Sicherheit von Haus aus.
  • Viele Senken (sinks): Datei-, Konsolen-, syslog-, rotierende Dateien, tägliche Dateien.
  • Unterstützung für benutzerdefinierte Formatierer (basierend auf fmtlib).
  • Asynchroner Modus mit Nachrichtenwarteschlange.
  • Bedingtes Logging.

Anwendungsbeispiel:

#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"

int main() { // Logger erstellen, der in eine Datei schreibt auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); spdlog::set_default_logger(file_logger); spdlog::set_level(spdlog::level::debug);

// Nachrichten loggen spdlog::info("Anwendung gestartet"); spdlog::warn("Verdächtiges Verhalten erkannt: {}", 42); spdlog::error("Kritischer Fehler: {}", errno);

// Asynchrones Logging spdlog::flush_every(std::chrono::seconds(3)); return 0;}

Wann wählen: Für moderne Projekte, bei denen Geschwindigkeit entscheidend ist. Ideal für Spiele, Echtzeitserver und Embedded-Systeme.



2. Google glog – ein bewährter Standard

Google glog (Google Logging Library) ist eine Bibliothek, die von Google für interne Zwecke entwickelt wurde. Sie ist einfach, zuverlässig und wird in tausenden Projekten weltweit eingesetzt. glog versucht nicht, die schnellste zu sein, bietet aber alle notwendigen Funktionen für das Logging in der Produktion.

Besonderheiten:

  • Automatische Log-Rotation nach Größe.
  • Logging-Stufen: INFO, WARNING, ERROR, FATAL (mit abort).
  • Bedingtes Logging (LOG_IF, LOG_EVERY_N).
  • Unterstützung des Aufrufstapels bei fatalen Fehlern.
  • Minimale Abhängigkeit – nur pthreads.

Anwendungsbeispiel:

#include <glog/logging.h>

int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); FLAGS_log_dir = "./logs"; FLAGS_minloglevel = google::INFO;

LOG(INFO) << "Server gestartet auf Port " << 8080; LOG(WARNING) <

Empfehlungen