Logging für C++: Die besten Lösungen (spdlog, glog, P7)

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 ein kritisch wichtiger Aspekt der Entwicklung jeder ernsthaften C++-Anwendung. Ein richtig konfiguriertes Logging-System ermöglicht es, den Programmstatus zu verfolgen, Fehler zu identifizieren, Audits durchzuführen und in der Produktionsumgebung zu debuggen. Im Gegensatz zu einfachen std::cout-Anweisungen bieten professionelle Bibliotheken Schweregrade (trace, debug, info, warn, error, fatal), Dateirotation, asynchrones Schreiben und minimale Auswirkungen auf die Leistung. In diesem Artikel betrachten wir drei der besten Lösungen für C++: spdlog, Google glog und P7.



1. spdlog – Schneller und moderner Logger

spdlog ist eine Header-Only-Bibliothek, geschrieben in C++11/14/17. Sie gilt als einer der schnellsten Logger im C++-Ökosystem. Hauptvorteile: Unterstützung des asynchronen Modus, zahlreiche Ausgabeformate (Konsole, Datei, Syslog, benutzerdefiniert), farbige Konsolenausgabe und minimaler Speicherverbrauch.



Beispiel für die grundlegende Verwendung:

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

int main() { // Erstellen eines Datei-Loggers auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); // Festlegen des Log-Levels spdlog::set_level(spdlog::level::debug);

// Nachrichten loggen spdlog::info("Anwendung gestartet"); file_logger->warn("Benutzer {} hat versucht, sich mit falschem Passwort anzumelden", "admin"); file_logger->error("Fehler bei der Datenbankverbindung: {}", 404);

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


Hauptmerkmale:

  • Leistung: Bis zu 5-10 Millionen Nachrichten pro Sekunde im asynchronen Modus.
  • Flexibilität: Unterstützung von Sinks (Ausgaben) – Konsole, Datei, Syslog, Telegram, Kafka.
  • Dateirotation: Automatische Erstellung von Logs nach Größe oder Zeit.
  • Farbige Ausgabe: Level werden für eine schnelle visuelle Diagnose eingefärbt.


2. Google glog – Bewährter Logger

Google glog (glog) ist eine Bibliothek von Google, die für interne Unternehmensanforderungen entwickelt wurde. Sie ist einfach, zuverlässig und eignet sich hervorragend für Serveranwendungen. Der Schwerpunkt liegt auf der Kategorisierung von Logs und der automatischen Aufzeichnung in Dateien.



Anwendungsbeispiel:

#include <glog/logging.h>

int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]);

// Konfiguration der Dateiausgabe FLAGS_log_dir = "./logs"; FLAGS_stderrthreshold = 1; // WARNING und höher auf stderr ausgeben

LOG(INFO) << "Server gestartet auf Port " << 8080; LOG(WARNING) << "Niedriger Arbeitsspeicher: " << 512 << " MB"; LOG(ERROR) << "Konfigurationsdatei konnte nicht geöffnet werden";

// Bedingtes Logging int x = 5; LOG_IF(INFO, x > 3) << "x ist größer als 3";

google::ShutdownGoogleLogging(); return 0;}


Eigenschaften von glog:

  • Automatische Rotation: Dateien werden nach Tagen und Größe erstellt.
  • Bedingtes Logging: LOG_IF, CHECK für Überprüfungen.
  • Signalunterstützung: Protokolliert automatisch einen Stack-Dump bei Abstürzen.
  • Minimale Konfiguration: Funktioniert "out of the box".


3. P7 – Logger für hochbelastete Systeme

P7 (oder P7::Logger) ist eine Bibliothek, die auf maximale Leistung und minimale Auswirkungen auf die Latenz der Anwendung ausgelegt ist. Sie verwendet eine asynchrone Warteschlange und minimiert Sperren. Ideal geeignet für Spiele-Engines, Finanzsysteme und

Empfehlungen